![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
Errores layout conexion php
Hola, me presento, acabo de iniciarme en el desarrollo de aplicaciones android en eclipse, he creado dos layout, uno principal con un boton que he instanciado a otro layout que realiza una entrada a una base de datos mediante la obtención de unos textos.
Envio los codigos: El principal: package com.example.stock; import android.support.v7.app.ActionBarActivity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Principal extends ActionBarActivity { private Button boton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_principal); // Instanciar elemento boton = (Button) findViewById(R.id.botonEntradas); // Accion del boton boton.setOnClickListener(new OnClickListener() { //@Override public void onClick(View v) { Intent intent = new Intent(Principal.this, Entrada.class); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.principal, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } El de la entrada: package com.example.stock; import android.support.v7.app.ActionBarActivity; import java.io.IOException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; //@SuppressLint("ShowToast") public class Entrada extends ActionBarActivity { final EditText codigo=(EditText)findViewById(R.id.codigoText); final EditText ubicacion=(EditText)findViewById(R.id.ubicacionTex t); final EditText unidades=(EditText)findViewById(R.id.cantidadText) ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_entrada); Button botonEntrada=(Button)findViewById(R.id.botonEntrad as); botonEntrada.setOnClickListener(new View.OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(View v) { try{ httpGetData("http://10.0.2.2/registrarArticulo.php?codigo="+codigo.getText()+ "&ubicacion="+ubicacion.getText()+"&unidades="+uni dades.getText()); Toast.makeText(getApplicationContext(), "El dato ha sido enviado correctamente", 1000).show(); }catch(Exception e){ Toast.makeText(getApplicationContext(), "Error en el envio de la informacion, verifique su conexion a internet y vuelva a intentarlo.", 1000).show(); } } }); } public String httpGetData(String mURL) { String response=""; mURL=mURL.replace(" ", "%20"); Log.i("LocAndroid Response HTTP Threas","Ejecutando get 0: "+mURL); HttpClient httpclient = new DefaultHttpClient(); Log.i("LocAndroid Response HTTP Thread","Ejecutando get 1"); HttpGet httppost = new HttpGet(mURL); Log.i("LocAndroid Response HTTP Thread","Ejecutando get 2"); try { Log.i("LocAndroid Response HTTP","Ejecutando get"); // Execute HTTP Post Request ResponseHandler<String> responseHandler=new BasicResponseHandler(); response = httpclient.execute(httppost,responseHandler); Log.i("LocAndroid Response HTTP",response); } catch (ClientProtocolException e) { Log.i("LocAndroid Response HTTP ERROR 1",e.getMessage()); // TODO Auto-generated catch block } catch (IOException e) { Log.i("LocAndroid Response HTTP ERROR 2",e.getMessage()); // TODO Auto-generated catch block } return response; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.entrada, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } El error que me da en el logCat: 09-25 20:12:04.570: D/AudioManager(9123): [AudioManager.java:471:<init>()] isMicrophoneMute // is_btsco_muted:false Mute:true 09-25 20:12:04.617: D/AndroidRuntime(9123): Shutting down VM 09-25 20:12:04.617: W/dalvikvm(9123): threadid=1: thread exiting with uncaught exception (group=0x4001a560) 09-25 20:12:04.625: E/AndroidRuntime(9123): FATAL EXCEPTION: main 09-25 20:12:04.625: E/AndroidRuntime(9123): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.stock/com.example.stock.Entrada}: java.lang.NullPointerException 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1580) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:1674) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread.access$1500(ActivityThr ead.java:117) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:942) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.os.Handler.dispatchMessage(Handler.java:99 ) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.os.Looper.loop(Looper.java:130) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread.main(ActivityThread.jav a:3694) 09-25 20:12:04.625: E/AndroidRuntime(9123): at java.lang.reflect.Method.invokeNative(Native Method) 09-25 20:12:04.625: E/AndroidRuntime(9123): at java.lang.reflect.Method.invoke(Method.java:507) 09-25 20:12:04.625: E/AndroidRuntime(9123): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:860) 09-25 20:12:04.625: E/AndroidRuntime(9123): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:618) 09-25 20:12:04.625: E/AndroidRuntime(9123): at dalvik.system.NativeStart.main(Native Method) 09-25 20:12:04.625: E/AndroidRuntime(9123): Caused by: java.lang.NullPointerException 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.Activity.findViewById(Activity.java:16 52) 09-25 20:12:04.625: E/AndroidRuntime(9123): at com.example.stock.Entrada.<init>(Entrada.java:24) 09-25 20:12:04.625: E/AndroidRuntime(9123): at java.lang.Class.newInstanceImpl(Native Method) 09-25 20:12:04.625: E/AndroidRuntime(9123): at java.lang.Class.newInstance(Class.java:1409) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.Instrumentation.newActivity(Instrument ation.java:1021) 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1572) 09-25 20:12:04.625: E/AndroidRuntime(9123): ... 11 more Una ayudita plissss. |
|
#2
|
Buenas
El mensaje es que estas apuntando a un puntero que no encuentra. Has puesto en el manifest.xml tu activity entrada? Si no... llegas a la segunda pantalla? |
#3
|
||||
|
||||
Hay que tirar del hilo de las excepciones... La clave la tienes aquí:
Código:
09-25 20:12:04.625: E/AndroidRuntime(9123): Caused by: java.lang.NullPointerException 09-25 20:12:04.625: E/AndroidRuntime(9123): at android.app.Activity.findViewById(Activity.java:16 52) 09-25 20:12:04.625: E/AndroidRuntime(9123): at com.example.stock.Entrada.<init>(Entrada.java:24) Código:
final EditText codigo=(EditText)findViewById(R.id.codigoText); |
Gracias de parte de: | ||
#4
|
||||
|
||||
Gracias por el apoyo recibido, y con tanta rapidez, es de agradecer.
Debido a mi pésimo por ahora conocimiento de programación de android (que no de java), no consigo verlo por mas que le doy vueltas. Adjunto el codigo fuente del proyecto para que me podais hechar una manaza. Muchas gracias por la solución anticipada. ![]() |
#5
|
||||
|
||||
Pero si ya te hemos dicho dónde está el fallo, la línea y todo
![]() El findViewById que llamas al principio en Entrada no puedes llamarlo ahí, lo tienes que llamar después del setContentView, igual que haces en Principal |
#6
|
||||
|
||||
Eso es lo primero que he hecho, pero me sigue dando errores.
Si fueseis tan amables de hecharle un vistazo.... |
#7
|
||||
|
||||
Claro, pero ahora te dará otro error digo yo, ¿no?.
Como ya tienes experiencia con java, échale un vistazo a las excepciones, suelen ser muy descriptivas como has podido ver (lo único es ver dónde está la línea que hace referencia a tus clases y el tipo de excepción). El resto es paciencia, ir solucionando los errores uno a uno. De todas formas, y más si estás empezando con android, es mejor ir haciendo la app paso a paso, y no escribir el código de un tirón que luego dificulta mucho el ir encontrando los errores. |
#8
|
||||
|
||||
En el código de Entradas.java has puesto esto:
Button botonEntrada=(Button)findViewById(R.id.botonEntrad as); Y en el Layout activity_entrada pone esto: android:id="@+id/botonGuardar" Así que el error te lo debe estar dando el setOnClickListener, porque como "botonEntradas" no lo encuentra botonEntrada es null. Y botonEntrada.setOnClickListener da NullPointerException. |
#9
|
||||
|
||||
Ya lo averigue, fue que tenia instanciado otro boton al entrar al layout, y me saltaban errores de null y todo lo demas.
De todas formas gracias. |
#10
|
||||
|
||||
Una única consultilla respecto a este tema, y es que no me guarda el registro cuando intento guardarlo, me lo hace todo correctamente y no me da problemas, sale el mensaje de ok.
Las conexiones con la base de datos y entrada de registros son correctas, probe: http://localhost/registrarArticulo.p...bicacion=sfsdf y con esto me añade el registro en la base de datos. Pero con la aplicación nada de nada. Alguna idea de lo que puede pasar????? |
#11
|
||||
|
||||
Alguna idea del problema?
|
#12
|
||||
|
||||
Alguien me puede ayudar???, me es importante.
Gracias.. |
#13
|
||||
|
||||
No estarás poniendo localhost como servidor en el móvil, no?
|
#14
|
||||
|
||||
Usa la 10.0.2.2, eso lo tiene bien. Quizá la URL que se genera tiene algún error, lo ideal sería ver la traza que ha puesto al recibir la respuesta.
La tostada de enviado correctamente que dice que le sale es engañosa porque no comprueba nunca si recibe un código 200 ok, podría ser un 404 o un 500. |
#15
|
||||
|
||||
y con el codigo que tengo como lo puedo solucionar, de verdad es que estoy bastante perdido con este tema, y llevo varios dias intentandolo sin exito.
|
#16
|
||||
|
||||
Tendrás que ir paso a paso...
1 - La URL que generas a partir de los parámetros es correcta? Muestrala en alguna traza. 2 - Para estar completamente seguros de que la URL es correcta, úsala en el navegador que tiene el emulador y mira si va bien. 3 - Si el paso 2 es correcto, volvemos a la app, la petición de http se llega a hacer? Recibes una respuesta? Qué código tiene la respuesta? Es un 200, un 500, otro número? |
#17
|
||||
|
||||
Cuando intento acceder con el movil a localhost, me dice que no tengo permisos:
You don´t hve permision to acces / on this server.... Es provable que por ese motivo no me funcione la aplicación, y si es así como darle permisos al movil. Gracias. |
#18
|
||||
|
||||
No puedes poner localhost en el navegador del móvil porque el servidor no está en el móvil, lo tienes en el PC. Tienes que poner la dirección IP del PC, o si estás con el emulador escribir http://10.0.2.2... (igual que lo tienes en el código, vaya) que es la dirección IP que representa el localhost del PC en el emulador del móvil.
|
#19
|
||||
|
||||
Ya me funciona en el emulador, gracias por todo, probandolo con el movil me salta errores de permisos en el apache que he de solucionar.
|
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 22:09:11 (GMT +2)
HTCMania: líderes desde el 2007