Autore Topic: Passare ArrayList da un activity all'altra  (Letto 1206 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Passare ArrayList da un activity all'altra
« il: 31 Maggio 2011, 18:22:42 CEST »
0
Nella prima activity mi creo un arrayList<ProdottoConcorsiPortale> che devo passare alla seconda activity.ProdottoConcorsiPortale è un oggetto che contiene int, double e string.
Codice (Java): [Seleziona]
Intent intent = new Intent(LoginActivity.this,CaricaPuntiActivity.class);
                                        String pkg = getPackageName();
                                        intent.putStringArrayListExtra(pkg +"myList", P);  //P è l'arrayList
                                        startActivity(intent);
Ma mi segnala errore perchè non è un arrayList di string,come posso fare?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passare ArrayList da un activity all'altra
« Risposta #1 il: 31 Maggio 2011, 18:25:16 CEST »
0
Beh, nn credo ci sia da meravigliarsi più di tanto. Se accetta un ArrayList<String> e tu gli pass ArrayList<Qualcosaltro> non lo prende.

Comunque, fai in modo che la classe ProdottoConcorsiPortale implementi l'interfaccia Serializable e usa il metodo putSerializable ;)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #2 il: 31 Maggio 2011, 18:57:04 CEST »
0
Beh, nn credo ci sia da meravigliarsi più di tanto. Se accetta un ArrayList<String> e tu gli pass ArrayList<Qualcosaltro> non lo prende.

Comunque, fai in modo che la classe ProdottoConcorsiPortale implementi l'interfaccia Serializable e usa il metodo putSerializable ;)

Ti ringrazio infinitamente,solo che ho un problema,non mi fa visualizzare i prodotti passati,nella prima activity io li stampo così:
Codice (Java): [Seleziona]
ProdottoConcorsiPortale[] P = RetrieveFromSoap(resultsRequestSOAP);
                              for(ProdottoConcorsiPortale p :P)
                              {
                                  Log.i("ID","ID PRODOTTO" + p.getId());
                                  Log.i("Descrizione","Descrizione prodotto" + p.getDescrizione());
                                  Log.i("Quantità","Quantità del prodotto" + p.getQuantitaMinima());
                                  Log.i("ID_CONCORSO","ID CONCORSO" + p.getID_Concorso());
                              }

e li mando alla seconda activity in questo modo:
Codice (Java): [Seleziona]
Intent intent = new Intent(LoginActivity.this,CaricaPuntiActivity.class);
                                        String pkg = getPackageName();
                                        P = (ProdottoConcorsiPortale[])intent.getSerializableExtra("arrayListProdotti");
                                        startActivity(intent);

Nella seconda activity li prendo così:
Codice (Java): [Seleziona]
Intent intent=getIntent(); // l'intent di questa activity
                String pkg = getPackageName();
                ProdottoConcorsiPortale[] P= (ProdottoConcorsiPortale[]) intent.getSerializableExtra("ArrayListProdotti");
            Log.i("Intent","passati");
            for(ProdottoConcorsiPortale p :P)
            {
                  Log.i("ID","ID PRODOTTO" + p.getId());
                  Log.i("Descrizione","Descrizione prodotto" + p.getDescrizione());
                  Log.i("Quantità","Quantità del prodotto" + p.getQuantitaMinima());
                  Log.i("ID_CONCORSO","ID CONCORSO" + p.getID_Concorso());
            }
Mi stampa 
Codice (Java): [Seleziona]
 Log.i("Intent","passati");e dopo va in errore,perchè?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Passare ArrayList da un activity all'altra
« Risposta #3 il: 31 Maggio 2011, 20:03:08 CEST »
0
se va in errore DEVI postare il logcat
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passare ArrayList da un activity all'altra
« Risposta #4 il: 31 Maggio 2011, 20:16:28 CEST »
0
Mi sa che hai un po' di confusione con i tipi.

ProdottoConcorsiPortale[] è un array, non un arraylist ;)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #5 il: 31 Maggio 2011, 20:26:24 CEST »
0
Ho allegato il logcat,i valori ID,Descrizione,QuantitaMinima e ID_CONCORSO sono  il risultato della prima activity.

Mi sa che hai un po' di confusione con i tipi.

ProdottoConcorsiPortale[] è un array, non un arraylist ;)

Si infatti,ma sostanzialmente non cambia niente :-)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #6 il: 01 Giugno 2011, 08:49:18 CEST »
0
Avevo usato
Codice (Java): [Seleziona]
 P = (ProdottoConcorsiPortale[])intent.getSerializableExtra("arrayListProdotti"); sia nella prima che nella seconda activity.

Ho modificato il codice così:
Prima Activity
Codice (Java): [Seleziona]
intent.putExtra(pkg +"ArrayListProdotti",P);
Seconda Activity:
Codice (Java): [Seleziona]
ProdottoConcorsiPortale P = (ProdottoConcorsiPortale[])intent.getSerializableExtra("arrayListProdotti");
Ma va comunque in errore.Allego il logcat
« Ultima modifica: 01 Giugno 2011, 09:16:12 CEST da dom4 »

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:Passare ArrayList da un activity all'altra
« Risposta #7 il: 01 Giugno 2011, 10:26:34 CEST »
0
Codice: [Seleziona]
06-01 07:10:52.619: ERROR/AndroidRuntime(415): java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.DoM/com.DoM.CaricaPuntiActivity}: java.lang.NullPointerException
Unable to start activity... uhm... l'hai dichiarata nel manifest? Se si, crea un Button di debug che la avvia senza passare niente, per capire se ci sono problemi di ordine superiore e quali sono.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #8 il: 01 Giugno 2011, 10:32:47 CEST »
0
Codice: [Seleziona]
06-01 07:10:52.619: ERROR/AndroidRuntime(415): java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.DoM/com.DoM.CaricaPuntiActivity}: java.lang.NullPointerException
Unable to start activity... uhm... l'hai dichiarata nel manifest? Se si, crea un Button di debug che la avvia senza passare niente, per capire se ci sono problemi di ordine superiore e quali sono.

Si l'activity è stata dichiarata nel manifest,ho aggiunto un try/catch alla seconda activity e allego il log con l'errore.
Ho provato a passare l'array con un bundle,in questo modo:

Prima acvitity:
Codice (Java): [Seleziona]
        Intent intent = new Intent(LoginActivity.this,CaricaPuntiActivity.class);
                                        String pkg = getPackageName();
                                        //P = (ProdottoConcorsiPortale[])intent.getSerializableExtra("arrayListProdotti");
                                        //intent.putExtra(pkg +"ArrayListProdotti",P);
                                        Bundle b=new Bundle();
                                    b.putSerializable("ArrayProdotti", P);
                                    intent.putExtras(b);
                                        startActivity(intent);

Seconda activity:
Codice (Java): [Seleziona]
  try{    
                Intent intent=getIntent(); // l'intent di questa activity
                String pkg = getPackageName();
                //SoapObject soap = (SoapObject) intent.getSerializableExtra("ArrayListProdotti");
               // ProdottoConcorsiPortale[] P= (ProdottoConcorsiPortale[]) intent.getSerializableExtra("ArrayListProdotti");
                Bundle b=this.getIntent().getExtras();
                ProdottoConcorsiPortale[] P = (ProdottoConcorsiPortale[]) b.getSerializable("ArrayProdotti");
                Log.i("Intent","passati");
         
         
            for(ProdottoConcorsiPortale p :P)
            {
                  Log.i("ID","ID PRODOTTO" + p.getId());
                  Log.i("Descrizione","Descrizione prodotto" + p.getDescrizione());
                  Log.i("Quantità","Quantità del prodotto" + p.getQuantitaMinima());
                  Log.i("ID_CONCORSO","ID CONCORSO" + p.getID_Concorso());
            }
            }catch(Exception e)
            {
                Log.i("Errore","L'errore è: " +e.toString());
            }    

L'errore dovrebbe essere questo
06-01 08:26:13.128: INFO/Errore(524): L'errore è: java.lang.ClassCastException: [Ljava.lang.Object;
Di che si tratta??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passare ArrayList da un activity all'altra
« Risposta #9 il: 01 Giugno 2011, 10:38:11 CEST »
0
Quel metodo, come ti ho scritto sopra, puoi usarlo se hai un ArrayList non un array.

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #10 il: 01 Giugno 2011, 10:43:59 CEST »
0
Quel metodo, come ti ho scritto sopra, puoi usarlo se hai un ArrayList non un array.

quindi come potrei fare?Ho provato a passarlo ad un arrayList ma poi non funziona il metodo della scansione degli oggetti,quindi devo assolutamente usare un array.
Praticamente io sto interrogando un ws,che mi restituisce questo oggetto ProdottoConcorsiPortale costituito da ID,Descrizione,QuantitaMinima,ID_Concorso,siccome interrogo il ws con ksoap,quindi la risposta mi arriva in un SoapObject,potrei provare a passare il soapObject così come mi arriva e deserializzarlo nella seconda activity.Ma come si passa un SoapObject tramite intent??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passare ArrayList da un activity all'altra
« Risposta #11 il: 01 Giugno 2011, 10:51:11 CEST »
+1
hai due soluzioni:

1)fai il modo che il metodo che scansiona ti ritorna un ArrayList, implementi interfaccia Serializable nella classe ProdottoConcorsiPortale e usi il metodo putSerializable.

2)fai il modo che la classe ProdottoConcorsiPortale implementi l'interfaccia Parcelable (quarda  qui come fare) e utilizzi il metodo putParcelableArray

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Passare ArrayList da un activity all'altra
« Risposta #12 il: 01 Giugno 2011, 11:13:45 CEST »
0
hai due soluzioni:

1)fai il modo che il metodo che scansiona ti ritorna un ArrayList, implementi interfaccia Serializable nella classe ProdottoConcorsiPortale e usi il metodo putSerializable.

2)fai il modo che la classe ProdottoConcorsiPortale implementi l'interfaccia Parcelable (quarda  qui come fare) e utilizzi il metodo putParcelableArray

Ho seguito la prima soluzione,ho riscritto in metodo che scansiona in modo tale che restituisca un ArrayList<ProdottoConcorsiPortale>,la classe ProdottoConcorsiPortale implementa Serializible,ho passato l'intent nel seguente modo:

Prima Activity:
Codice (Java): [Seleziona]
Intent intent = new Intent(LoginActivity.this,CaricaPuntiActivity.class);
                                        String pkg = getPackageName();
                                        Bundle b=new Bundle();
                                b.putSerializable("ArrayProdotti", P);
                                intent.putExtras(b);
                                       
                                        startActivity(intent);
Seconda activity:
Codice (Java): [Seleziona]
 try{    
               // Intent intent=getIntent(); // l'intent di questa activity
                String pkg = getPackageName();
                Bundle b=this.getIntent().getExtras();
                ArrayList<ProdottoConcorsiPortale> P= (ArrayList<ProdottoConcorsiPortale>) b.getSerializable("ArrayProdotti");
               
                Log.i("Intent","passati");
         
         
            for(ProdottoConcorsiPortale p :P)
            {
                  Log.i("ID","ID PRODOTTO" + p.getId());
                  Log.i("Descrizione","Descrizione prodotto" + p.getDescrizione());
                  Log.i("Quantità","Quantità del prodotto" + p.getQuantitaMinima());
                  Log.i("ID_CONCORSO","ID CONCORSO" + p.getID_Concorso());
            }
            }catch(Exception e)
            {
                Log.i("Errore","L'errore è: " +e.toString());
            }    


Problema risolto,grazie mille per i suggerimenti.