Acceder

Ver la Versión Completa : Errores layout conexion php


xero83
25/09/14, 20:19:22
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="+unidades.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.

jmmunoz
25/09/14, 20:27:26
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?

mocelet
25/09/14, 20:30:13
Hay que tirar del hilo de las excepciones... La clave la tienes aquí:

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)

Entrada.java, línea 24. Supongo que es esta...

final EditText codigo=(EditText)findViewById(R.id.codigoText);


Normal que salte una excepción, la actividad no ha sido instanciada, ni se ha cargado el layout evidentemente. No puedes llamar al findViewById sin que la actividad se haya creado.

xero83
25/09/14, 21:17:47
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.
:cucu:

mocelet
25/09/14, 21:33:40
Pero si ya te hemos dicho dónde está el fallo, la línea y todo X-D

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

xero83
25/09/14, 21:37:52
Eso es lo primero que he hecho, pero me sigue dando errores.
Si fueseis tan amables de hecharle un vistazo....

mocelet
25/09/14, 21:57:42
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.

kriogeN
25/09/14, 22:11:25
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.

xero83
25/09/14, 22:17:58
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.

xero83
26/09/14, 00:03:20
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.php?codigo=111&unidades=111&ubicacion=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?????

xero83
26/09/14, 11:08:40
Alguna idea del problema?

xero83
26/09/14, 20:31:38
Alguien me puede ayudar???, me es importante.

Gracias..

kriogeN
26/09/14, 21:04:00
No estarás poniendo localhost como servidor en el móvil, no?

mocelet
26/09/14, 21:35:48
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.

xero83
26/09/14, 22:07:21
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.

mocelet
26/09/14, 22:26:34
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?

xero83
01/10/14, 13:14:18
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.

mocelet
01/10/14, 14:07:47
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.

xero83
02/10/14, 12:56:06
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.