Error al regresar a una activity usando boto atras <-- de la actionBar

272 views
Skip to first unread message

Alvaro Carreño

unread,
Nov 17, 2015, 9:27:45 PM11/17/15
to desarrolladores-android
Saludos compañeros, les comento este problema, tengo 4 activitys (MainActivivy, Main2Activity, Main3Activity, Main4Activity) ya estan operativas y funcionan bien, pero ahora quiero usar el boton de (Atras) que aparece en actionBar para regresar de una activity a la otra, Actualmente no tenia ese boton activo (<--) buscando por ahi encontre este codigo para colocar en el manifest y asi poder usarlo: (parentActivityName con meta-data)
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme0" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main2Activity"
android:label="@string/activity2"
android:theme="@style/AppTheme"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.alvarolapto.soafiandroid.MainActivity" />

</activity>
<activity
android:name=".Main3Activity"
android:label="@string/activity3"
android:theme="@style/AppTheme"
android:parentActivityName=".Main2Activity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.alvarolapto.soafiandroid.Main2Activity" />
</activity>
<activity
android:name=".Main4Activity"
android:label="@string/activity4"
android:theme="@style/AppTheme"
android:parentActivityName=".Main2Activity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.alvarolapto.soafiandroid.Main2Activity" />
</activity>

La logica de las actividades es la siguiente:

MainActivity=Pantalla de inicio
Main2Activity = presenta un listView poblado desde un WS, dependiendo de lo que se selecciona se muestra el
detalle en la Main3Activity o Main4Activity

Lo que me gustaria es regresar de la 3 o la 4 para la 2 usando el boton (<--) que aparece en la actionBar, cuando lo hago me da error, perdonen la ignorancia pero
esta correcto el modo como lo estoy haciendo? agrego algo del logcat, gracias por su ayuda. OJO usando el boton de la parte
inferior para volver atras no me da error

11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: FATAL EXCEPTION: main
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: Process: com.example.alvarolapto.soafiandroid, PID: 13091
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.alvarolapto.soafiandroid/com.example.alvarolapto.soafiandroid.Main2Activity}: java.lang.NullPointerException
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2412)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:174)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:146)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5593)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:515)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: Caused by: java.lang.NullPointerException
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.example.alvarolapto.soafiandroid.Main2Activity.onCreate(Main2Activity.java:41)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5458)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:174) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:146) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5593) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:515) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)



edgar macas

unread,
Nov 18, 2015, 1:26:56 AM11/18/15
to desarrolladores-android
el problema parece que es por un Caused by: java.lang.NullPointerException
deberias de revisar si no tienes alguna varible sin inicializar en la actividad Main2Activity, o podrias poner tu codigo de esa calse para poder revisarla

Eduardo Martin Cabrera

unread,
Nov 18, 2015, 6:22:39 AM11/18/15
to desarrolladores-android
Hola esa parte el manifest estaria bien pero, falta el lado del codigo y todo lo que se te puede acercar es una mera hipotesis 

* estas usando fragment o solo activity's,?

* que tipo de action bar estas usando el viejo estilo o el nuevo usando Toolbar?

estas inicializando correctamente el toolbar en los MainAct.. 3 y 4?
algo como:

protected void onCreate(Bundle savedInstanceState) {

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

* estas usando la libreria support? tanto en dependencia como su uso en codigo?

* como pasas de MainAct 2 a 3 y 4?  new Intent ..... startActivity....

* cuando pasas del MainActivity a MainActivity2, le pasas algun dato adicional al intent (via bundle, setData, etc), algún datos que quizás no se existe cuando se pasa al retornar desde los 3 y 4? como dijo el colega antes podria ser que haya una variable que quede sin inicializar.

* usas fragments o solo actividades?
* por si acaso, en los MainActivity's 3 y 4 estas haciendo override al método onBackPressed()?

* o estas usando el metodo finish() en alguna de las activity's?


Alvaro Carreño

unread,
Nov 18, 2015, 1:33:17 PM11/18/15
to desarrolladores-android
Saludos y gracias por tu respuesta, la primera actividad1 carga y pide datos luego pasa a la segunda actividad2 enviando los datos por intent, la segunda actividad2 arranca recibe los datos por intent y llena un listView desde un WS, al tocar un item del listView paso a la actividad3 y muestro info y cuando le doy al boton de atras (<--) de la actionBar quiero regresar a la segunda actividad2 pero da el error . Ahora te pregunto estimado compañero EXISTE UN PROBLEMA con el INTENT de la actividad2 es decir estara perdiendo los datos he leido algo sobre eso y quisiera saber antes de ponerme a inventar ja ja ja? Nota uso activitys y no fragments

Alvaro Carreño

unread,
Nov 18, 2015, 1:41:16 PM11/18/15
to desarrolladores-android
Saludos amigo Eduardo y gracias por tu respuesta, uso solo activitys la app ya esta construida y funcionando solo queria agregar el boton (<--) atras de la actionBar.

Uso la actionBar por defecto no uso el objeto Toolbar
Estoy usando  com.android.support:appcompat-v7:22.2.1
Los datos los paso por intent a las actividades

Ahora te comento, la primera actividad1 carga y pide datos luego pasa a la segunda actividad2 enviando los datos por intent, la segunda actividad2 arranca recibe los datos por intent y llena un listView desde un WS, al tocar un item del listView paso a la actividad3 y muestro info y cuando le doy al boton de atras (<--) de la actionBar quiero regresar a la segunda actividad2 pero da el error . Ahora te pregunto estimado compañero EXISTE UN PROBLEMA con el INTENT de la actividad2 es decir estara perdiendo los datos o algo, la segunda actividad2 es destruida cuando paso a la actividad3 verdad (vi algo de eso en el ciclo de vida de una activity) ahora porque cuando se usa el boton de atras de la parte inferior si regresa a la segunda actividad sin error

Gabriel Pozo

unread,
Nov 18, 2015, 2:33:34 PM11/18/15
to desarrolladores-android

No es complicado ver porque explota tu app.
En el log que nos enviaste: (como te lo marco edgar)

Caused by: java.lang.NullPointerException
11-17 21:42:17.237 13091-13091/? E/AndroidRuntime: at com.example.alvarolapto.soafiandroid.Main2Activity.onCreate(Main2Activity.java:41)

O sea que tenes un puntero nulo, eso seguramente esta relacionado al ciclo de vida de el activity. Mira bien esa línea, corregí el puntero nulo, teniendo en cuenta el ciclo de vida. En otras palabras, cuando presionas el botón seguramente no se inicializa alguna variable porque no se ejecuta la función donde lo haces, por ejemplo el onCreate, pero si se elimina, por ejemplo en el onStop. Digo todo esto sin mirar tu código y sólo mirando el log ;) (que es lo más importante )


--
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/009975a3-67ab-43fe-98d2-0693c8540edd%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Eduardo Martin Cabrera

unread,
Nov 19, 2015, 3:47:22 AM11/19/15
to desarrolladores-android
Hola Alvaro, como dije antes todo es mera hipotesis sin un codigo concreto, no te puedo decir si hay un error en tu intent si no se como es tu codigo, pero haciendo uso de mis poderes adivinatorios y tabla ouija :p para mi puede haber algunos de los siguientes errores:

A) no se esta inicializando bien el actionBar en 3 y 4 (bien quiere decir usan los metodos de la lib support en codigo, destinados al actionbar)

b) que tu activity2 cuando "arranca" esta esperando siempre los datos del 1 (sin contemplar que también se puede volver desde 3 o 4), y cuando vuelve de 3 o 4 esos datos obviamente no estarán! y ahi crashea (con la salvedad de que usando el boton funciona ok, eso me confunde, pero al no haber codigo no se puede determinar mas),de nuevo son meras hipotesis, y como sin codigo no se puede ahondar mas, aun estos 2 items podrian no ser la causa!

aparte cuando pasas de activity2 al los 3 o 4 usas startActivity o StartActivityForResult (seria conveniente que lo segundo), saludos!



Alvaro Carreño

unread,
Nov 19, 2015, 9:35:57 AM11/19/15
to desarrolladores-android
Saludos y gracias a todos por sus respuestas aca les dejo el codigo:

Este el codigo del Activity2 el cual recibe datos del Activity1 por intent
public class Main2Activity extends AppCompatActivity {

   
String nac,cedula,response,response2;
   
String cliente;
   
TextView xTxtCliente;
   
ListView xListado1;
   
List<claseCuentas> datosCtas;
   
String Resultado;
   
volatile boolean endActivity = false;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView
(R.layout.activity_main2);

        xTxtCliente
=(TextView)findViewById(R.id.txtCliente);
        xListado1
=(ListView)findViewById(R.id.lvListado);

        datosCtas
=new ArrayList<claseCuentas>();

        xTxtCliente
.setText("");

       
Bundle b=this.getIntent().getExtras();
        nac
=b.getString("nac");
        cedula
=b.getString("cedula");
        response
=b.getString("datos");

        obtDatosJSON
(response);

        xListado1
.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           
@Override
           
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               
String pro=((claseCuentas) parent.getItemAtPosition(position)).getC_producto();
               
String age = ((claseCuentas) parent.getItemAtPosition(position)).getC_agencia();
               
String xcta = ((claseCuentas) parent.getItemAtPosition(position)).getC_cuenta();
               
String var1 = ((claseCuentas) parent.getItemAtPosition(position)).getC_numero();
               
String var2 = ((claseCuentas) parent.getItemAtPosition(position)).getC_tipo();
               
String cta=var2+" "+var1;
               
//String cta=var1;
               
String con="0";
               
Intent i2;
               
Bundle b2 = new Bundle();
               
if (pro.equals("CUENTA")) {
                    i2
= new Intent(Main2Activity.this, Main3Activity.class);
                    b2
.putString("con", con);
                    b2
.putString("cta", cta);
                    b2
.putString("xcta", xcta);
                    b2
.putString("age", age);
               
}
               
else {
                    con
="4";
                    i2
= new Intent(Main2Activity.this, Main4Activity.class);
                    b2
.putString("con", con);
                    b2
.putString("cta", cta);
                    b2
.putString("xcta", xcta);
               
}
                i2
.putExtras(b2);
                startActivity
(i2);
           
}
       
});
   
}
Como pueden ver hay un ListView el cual es poblado con el metodo obtDatosJSON(response) y cuando se pulsa sobre un item se llama la Actividad3 o Actividad4. Aca les dejo parte del codigo de la Actividad3
public class Main3Activity extends AppCompatActivity {

    TextView xTxtSaldoDisp,xTxtSaldoDif,xTxtSaldoBlo;
    TextView xTxtCuenta;
    ListView xListado;
    Spinner xSpiTip_Mov;
    String con,cta,xcta,age;
    String Resultado;

    DecimalFormat numFormat = new DecimalFormat("###,###.##");

    volatile boolean endActivity = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        xTxtSaldoDisp=(TextView)findViewById(R.id.txtSaldoDisp3);
        xTxtSaldoDif=(TextView)findViewById(R.id.txtSaldoDif3);
        xTxtSaldoBlo=(TextView)findViewById(R.id.txtSaldoBlo3);
        xTxtCuenta=(TextView)findViewById(R.id.txtCuenta3);
        xListado=(ListView)findViewById(R.id.lvListado);
        xSpiTip_Mov=(Spinner)findViewById(R.id.spiTip_mov);

        Bundle b=this.getIntent().getExtras();
        con=b.getString("con");
        cta=b.getString("cta");
        xcta=b.getString("xcta");
        age=b.getString("age");
        inicio();
              
        });
    }
Como pueden ver recibe datos de la actividad2 y muestra la info en unos View los cuales son poblados por el metodo inicio(), hasta aca todo bien funciona sin problemas. El detalle es que si regreso a la Activity2 desde usando el boton del sistema Back (boton de la parte inferior del movil) puedo regresar sin problemas a la Activity2, pero si uso el boton Up de la actionBar (boton en la parte superio el cual lo coloque modificando el manifest como lo indique al principio) me da el error publicado anteriormente, mi duda es el intent de la Activity2 se pierde verdad? es decir cuando se carga la Activity2 el intent esta vacio y ahi el error? y usando el boton de Back no sucede eso es porque se carga una version previa de la memoria? gracias por sus comentarios..

Gabriel Pozo

unread,
Nov 19, 2015, 11:49:53 AM11/19/15
to desarrolladores-android

Lee nuevamente mi comentario ;) después de releer el funcionamiento del ciclo de vida de un activity
Después de eso, utiliza logs, sobre la línea en cuestión, los métodos onCreate, onstart, etc
Así comprenderás que sucede exactamente.

El solucionar un nullpointerexception es el error más sencillo a solucionar. Es un buen comienzo para aprender a solucionar errores

P.D.: utiliza mucho los logs, y el modo debug con varios breackpoints así aprenderás que sucede cada vez que tienes un error en el código


--
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.

Alvaro Carreño

unread,
Nov 19, 2015, 3:14:16 PM11/19/15
to desarrolladores-android
Entendido amigo Gabriel y gracias por tus comentarios...
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages