Error NullPointerException en mi aplicacion

148 views
Skip to first unread message

Josue C.P.

unread,
Jan 19, 2015, 9:46:09 AM1/19/15
to desarrollad...@googlegroups.com
Hola chi@s.

Estoy intentando hacer una aplicación que descargue datos desde la web. Para ello estoy usando JSON.
Tengo un documento en la web que es de tipo JSON con ciertos valores. Lo que quiero hacer es simplemente conectarme a la web, leer los datos JSON y mostrarlos en TextViews.

La historia es que el codigo aparentemente parece bien pero a la hora de ejecutarlo me da un NullPointerException, concretamente el mensaje de error es este:

NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 

A continuación les muestro mi código:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtNombre = (TextView) findViewById(R.id.nombre);
        txtApellido = (TextView) findViewById(R.id.apellido);


        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://josuecamara.es/android/documento.json");
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            InputStream webs = entity.getContent();

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(webs, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                webs.close();
                result = sb.toString();
            }catch (Exception e) {
                Log.e("mensaje log", "Error en 2º try " + e.toString());}

        }catch (Exception e) {
                Log.e("mensaje log", "Error en 1º try " + e.toString());}

        try {
            JSONObject jsonObject = new JSONObject(result);
            nombre = jsonObject.getString("Nombre");
            apellido = jsonObject.getString("Apellido");

            txtNombre.setText(nombre);
            txtApellido.setText(apellido);

        } catch (JSONException e) {
            Log.e("mensaje log", "Error en 2º try " + e.toString());
        }


    }

Como veis es simple, conexión con la web, descarga del contenido y parsearlo en un objeto JSON para mostrarlos en textviews.

He comprobado que el error está en el ultimo try, a la hora de trabajar con el objeto JSON (al comentarlo ya no da errores). Pero no consigo ver el porqué del error.

Si alguien puede ver algo me sería de gran ayuda.

Muchas gracias a todos!!!!!!
 

Leonardo Fernandez

unread,
Jan 19, 2015, 9:58:55 AM1/19/15
to desarrollad...@googlegroups.com
Podrias poner el logcat que te lanza...
Otra recomendación seria utilizar gson para convertir el response a objeto java, y si quieres algo mas simple aun utilizar volley o retrofit...

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/263f5079-e8bd-4d77-ace0-bb26ac199bfe%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Josue C.P.

unread,
Jan 19, 2015, 10:51:26 AM1/19/15
to desarrollad...@googlegroups.com
Hola Leodufer, gracias por contestar.

A continuación pego el LogCat.

01-19 14:01:03.584    1897-1897/jsonconnect.josue.es.jsonconnect I/System.out﹕ waiting for debugger to settle...
01-19 14:01:03.796    1897-1897/jsonconnect.josue.es.jsonconnect I/System.out﹕ waiting for debugger to settle...
01-19 14:01:04.015    1897-1897/jsonconnect.josue.es.jsonconnect I/System.out﹕ waiting for debugger to settle...
01-19 14:01:04.239    1897-1897/jsonconnect.josue.es.jsonconnect I/System.out﹕ waiting for debugger to settle...
01-19 14:01:04.455    1897-1897/jsonconnect.josue.es.jsonconnect I/System.out﹕ debugger has settled (1354)
01-19 14:01:04.593    1897-1897/jsonconnect.josue.es.jsonconnect E/mensaje log﹕ Error en 1º try android.os.NetworkOnMainThreadException
01-19 14:01:04.593    1897-1897/jsonconnect.josue.es.jsonconnect D/AndroidRuntime﹕ Shutting down VM
01-19 14:01:04.624    1897-1897/jsonconnect.josue.es.jsonconnect E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: jsonconnect.josue.es.jsonconnect, PID: 1897
    java.lang.RuntimeException: Unable to start activity ComponentInfo{jsonconnect.josue.es.jsonconnect/jsonconnect.josue.es.jsonconnect.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
            at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
            at org.json.JSONTokener.nextValue(JSONTokener.java:94)
            at org.json.JSONObject.<init>(JSONObject.java:156)
            at org.json.JSONObject.<init>(JSONObject.java:173)
            at jsonconnect.josue.es.jsonconnect.MainActivity.onCreate(MainActivity.java:79)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
01-19 14:06:04.994    1897-1897/jsonconnect.josue.es.jsonconnect I/Process﹕ Sending signal. PID: 1897 SIG: 9

Gracias!

Leonardo Fernandez

unread,
Jan 19, 2015, 12:33:24 PM1/19/15
to desarrollad...@googlegroups.com
Primeramente estas tratando de hacer una llamada de red dentro de UIthread, lo cual provoca la excepcion:
 01-19 14:01:04.593    1897-1897/jsonconnect.josue.es.jsonconnect E/mensaje log﹕ Error en 1º try android.os.NetworkOnMainThreadException

Como lo tratas con el try-catch tu objeto result permanece null y al tratar de acceder al mismo produce el NullPointerException :
 java.lang.RuntimeException: Unable to start activity ComponentInfo{jsonconnect.josue.es.jsonconnect/jsonconnect.josue.es.jsonconnect.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at jsonconnect.josue.es.jsonconnect.MainActivity.onCreate(MainActivity.java:79)

Si quieres corregirlo deberas encapsular la llamada http dentro de una llamada asincrona con AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html

También tienes esta excelente guia en español http://www.sgoliver.net/blog/?p=3099

Si quieres utilizar retrofit con gson tengo un video tutorial en mi canal sobre el mismo (es un poco largo pero explicamos varios detalles) https://www.youtube.com/watch?v=UG7-BbjS2L4

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Josue C.P.

unread,
Jan 23, 2015, 3:17:36 PM1/23/15
to desarrollad...@googlegroups.com
Muchas Gracias Leodofer! he solucionado el problema con AsyncTask. 
Ví tu videotutorial pero no usé retrofit ya que primero quería probar con lo mas esencial. 

Por cierto, muy bueno tu canal, tienes un nuevo suscriptor :)

Muchas gracias!!!!!!!!

 
Reply all
Reply to author
Forward
0 new messages