Autore Topic: Ritorno alla prima activity  (Letto 1294 volte)

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Ritorno alla prima activity
« il: 18 Maggio 2013, 13:09:30 CEST »
0
Salve a tutti! Ho da poco cominciato a programmare per android e sono appena iscritto al forum! :)
Mi rivolgo a voi per cercare di risolvere questo problema su una app di prova:

Ho due activity:
-dalla Prima, tramite click di un bottone apposito, si passa alla Seconda
-Nella seconda viene creato un oggetto di tipo "Constants" (classe creata implementando Parcelable) e tramite click del pulsante dovrebbe diaprire la prima activity passando quest'oggetto: questo non avviene, ma l'esecuzione viene interrotta bruscamente.

PRIMA ACTIVITY
Codice (Java): [Seleziona]
public class MainActivity extends Activity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                Button bA = (Button) findViewById(R.id.bA);
                TextView tA = (TextView) findViewById (R.id.tA);

                bA.setOnClickListener (new View.OnClickListener() {    
                        public void onClick(View v){
                        Intent i = new Intent(MainActivity.this, SelectConstants.class);
                        startActivity(i);
                        }
                });    
               
        Bundle b = getIntent().getExtras();
        Constants c = b.getParcelable("key");
        tA.setText(c.getName() + c.getT() + c.getP());
        }
}


SECONDA ACTIVITY
Codice (Java): [Seleziona]
public class SelectConstants extends Activity {
       
        private Constants c;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_select_constants);
               
                c = new Constants ("nome", 2.3, 4.5);
                Button bHome = (Button) findViewById (R.id.bHome);
                TextView tB             = (TextView) findViewById (R.id.tB);
                tB.setText(c.getName() + c.getT() + c.getP());
               
               
               
                bHome.setOnClickListener (new View.OnClickListener() { 
                        public void onClick(View v){
                            Intent i = new Intent(SelectConstants.this, MainActivity.class);
                            i.putExtra("key", c);
                            startActivity(i);          
                        }
                });
               
        }

}


Facendo varie prove credo di aver capito che l'errore risiede in queste righe della prima.
Codice (Java): [Seleziona]
        Bundle b = getIntent().getExtras();
        Constants c = b.getParcelable("key");
        tA.setText(c.getName() + c.getT() + c.getP());


Cosa sbaglio? Grazie mille a chiunque proverà ad aiutarmi :)



PS: Dopo decine e decine di tentativi ho provato a creare per verifica una terza activity (passando l'oggetto a questa) e funziona perfettamente. Non riesco proprio a capire perché nella prima activity proprio non voglia funzionare.. dipende dal fatto che già c'è l'intent per passare alla seconda activity?

Post unito: 18 Maggio 2013, 13:26:15 CEST
Ecco il Log

Codice: [Seleziona]
05-18 11:23:36.875: D/AndroidRuntime(284): Shutting down VM
05-18 11:23:36.875: W/dalvikvm(284): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-18 11:23:36.895: E/AndroidRuntime(284): FATAL EXCEPTION: main
05-18 11:23:36.895: E/AndroidRuntime(284): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.provawaals/com.example.provawaals.MainActivity}: java.lang.NullPointerException
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.os.Looper.loop(Looper.java:123)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 11:23:36.895: E/AndroidRuntime(284):         at java.lang.reflect.Method.invokeNative(Native Method)
05-18 11:23:36.895: E/AndroidRuntime(284):         at java.lang.reflect.Method.invoke(Method.java:521)
05-18 11:23:36.895: E/AndroidRuntime(284):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 11:23:36.895: E/AndroidRuntime(284):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 11:23:36.895: E/AndroidRuntime(284):         at dalvik.system.NativeStart.main(Native Method)
05-18 11:23:36.895: E/AndroidRuntime(284): Caused by: java.lang.NullPointerException
05-18 11:23:36.895: E/AndroidRuntime(284):         at com.example.provawaals.MainActivity.onCreate(MainActivity.java:35)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-18 11:23:36.895: E/AndroidRuntime(284):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-18 11:23:36.895: E/AndroidRuntime(284):         ... 11 more
05-18 11:23:40.935: I/Process(284): Sending signal. PID: 284 SIG: 9
« Ultima modifica: 18 Maggio 2013, 13:26:15 CEST da Athair90, Reason: Merged DoublePost »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ritorno alla prima activity
« Risposta #1 il: 18 Maggio 2013, 17:48:12 CEST »
+1
Citazione
05-18 11:23:36.895: E/AndroidRuntime(284): Caused by: java.lang.NullPointerException
05-18 11:23:36.895: E/AndroidRuntime(284):         at com.example.provawaals.MainActivity.onCreate(MainActivity.java:35)

Qual'è esattamente la riga 35 di MainActivity.java ? C'è qualcosa di NULL
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Re:Ritorno alla prima activity
« Risposta #2 il: 19 Maggio 2013, 01:53:06 CEST »
0
Ciao e grazie per la risposta! :D

ecco:
Codice: [Seleziona]
34    Bundle b = getIntent().getExtras();
35    Constants c = b.getParcelable("key");
36    tA.setText(c.getName() + c.getT() + c.getP());

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Ritorno alla prima activity
« Risposta #3 il: 19 Maggio 2013, 02:11:58 CEST »
+1
Al primo avvio dell'activity di cui posti il codice, nessun bundle viene passato (ipotizzo sia la prima cui ti riferivi).
Quindi b vale null, e chiamando b.getParcelable("key") fai scattare il NullPointerException.

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Re:Ritorno alla prima activity
« Risposta #4 il: 19 Maggio 2013, 02:24:05 CEST »
0
capisco.. quindi in pratica come cambierebbe il codice? O.o

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ritorno alla prima activity
« Risposta #5 il: 19 Maggio 2013, 08:50:25 CEST »
+1
capisco.. quindi in pratica come cambierebbe il codice? O.o

Codice (Java): [Seleziona]
Bundle b = getIntent().getExtras();
if (b!=NULL) {
   // fai quello che hai scritto nel codice
} else {
   // è il primo avvio dell'activity o comunque non c'è niente nel bundle
}
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Re:Ritorno alla prima activity
« Risposta #6 il: 19 Maggio 2013, 10:47:44 CEST »
0
grazie ad entrambi, provo :)

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Re:Ritorno alla prima activity
« Risposta #7 il: 24 Maggio 2013, 12:19:34 CEST »
0
Grazie ad entrambi funziona! E' incredibile quanto tempo ho perso per questa cavolata :)

Una piccola domanda: mi spiegate come mai quando passo da un'activity all'altra e poi ritorno alla prima, i valori che erano stati inseriti questa sono spariti? (non i valori passati con l'intent ovviamente, ma altri che erano stati già inseriti in un EditText o in una TextView.)
E come risolvo? (so che potrei serializzare o passare tutto tramite intent e poi farli ritornare, ma mi chiedevo se ci fosse un metodo meno macchinoso!)


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ritorno alla prima activity
« Risposta #8 il: 24 Maggio 2013, 12:39:22 CEST »
+1
Una piccola domanda: mi spiegate come mai quando passo da un'activity all'altra e poi ritorno alla prima, i valori che erano stati inseriti questa sono spariti? (non i valori passati con l'intent ovviamente, ma altri che erano stati già inseriti in un EditText o in una TextView.)
E come risolvo? (so che potrei serializzare o passare tutto tramite intent e poi farli ritornare, ma mi chiedevo se ci fosse un metodo meno macchinoso!)

In pratica devi gestire tu stesso salvataggio dei dati (in SharedPreferences o Database o altro) quando viene aperta un'altra activity e ripristino quando si torna alla precedente.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Athair90

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 13.04
Re:Ritorno alla prima activity
« Risposta #9 il: 24 Maggio 2013, 12:43:24 CEST »
0
Ok ti ringrazio ancora :)

vado un attimo in OT dopodiché potete anche mettere risolto (magari il post potrà essere d'aiuto ad altri):
a quale testo, libro, manuale, guida, ecc posso fare riferimento per imparare? Fin ora ho cercato quel che mi serviva in base alle mie conoscenze di Java, ma ci sono cose che non so neanche che esistono.. magari un punto di riferimento mi può essere utile :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ritorno alla prima activity
« Risposta #10 il: 24 Maggio 2013, 12:48:56 CEST »
+1
Ok ti ringrazio ancora :)

vado un attimo in OT dopodiché potete anche mettere risolto (magari il post potrà essere d'aiuto ad altri):
a quale testo, libro, manuale, guida, ecc posso fare riferimento per imparare? Fin ora ho cercato quel che mi serviva in base alle mie conoscenze di Java, ma ci sono cose che non so neanche che esistono.. magari un punto di riferimento mi può essere utile :)

C'è l'ultima edizione del libro del Carli e comunque puoi usare anche la guida gratuita alla programmazione android di punto-informatico.it.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store