Autore Topic: Gestione di più actvity  (Letto 707 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Gestione di più actvity
« il: 14 Giugno 2011, 18:01:18 CEST »
0
Per la mia applicazione ho 3 actvity,dalla prima effettuo un login e passo un arrayLIst ed un oggetto alla seconda actvity.
La seconda actvity è quella principale dove vengono effettuate diverse operazioni.Se viene cliccato un bottone parte una terza actvity a cui passa un arraylist,qui viene creato un nuovo arraylist e viene ritornato alla seconda actvity.dalla seconda activity se premo nuovamente il bottone per andare alla terza actvity,l'applicazione crasha,come posso gestire il ciclo di vita di queste activity?

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Gestione di più actvity
« Risposta #1 il: 15 Giugno 2011, 02:08:15 CEST »
0
Detto così serve davvero a poco... Dovresti postare il codice relativo alle varie activity e soprattutto il LOGCAT (vedi firma) :)
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Gestione di più actvity
« Risposta #2 il: 15 Giugno 2011, 09:05:46 CEST »
0
Si hai ragione,ho pure ricevuto un richiamo :'(
Questa è la mia seconda activity,quella principale,in cui se clicco sul bottone carica prodotti,parte la terza activity dove effettuo la selezione ed il caricamento del nuovo arrayList da rimandare alla seconda actvity.
Codice (Java): [Seleziona]
  public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.caricamento);
                codiceCarta = (EditText)findViewById(R.id.NumeroCarta1);
                importo = (EditText)findViewById(R.id.Importo1);
                carica = (Button)findViewById(R.id.Carica);
                caricaProdotti=(Button)findViewById(R.id.button1);
                punti =(TextView)findViewById(R.id.punti);
         
             
               
                Bundle b=this.getIntent().getExtras();
                P= (ArrayList<ProdottoConcorsiPortale>) b.getSerializable("ArrayProdotti");
                Bundle b1 = this.getIntent().getExtras();
                bussInfo =(BusinessInfo) b1.getSerializable("businessInfo");
                Log.i("business","business " + bussInfo.getCodice() + bussInfo.getLogin() + bussInfo.getPassword() );
                Log.i("Intent","passati");
               
                /*
                for(ProdottoConcorsiPortale p :P)
                {
                        Log.i("","" + p.getId());
                        Log.i("","" + p.getDescrizione());
                        Log.i("","" + p.getQuantitaMinima());
                        Log.i("","" + p.getID_Concorso());
                }*/

               
                try{  
                 Log.i("","Prima lista inserita");
                 Bundle b2 = this.getIntent().getExtras();
                 listaInseriti =(ArrayList<ProdottoConcorsoTransazionePunti>) b2.getSerializable("ProdottiInseriti");
                     if (listaInseriti.isEmpty())
                      {
                         Log.i("","Lista Vuota");
                      }
                Log.i("Lista","Lista Ricevuta da caricaProdotti" + listaInseriti.size());
               
                for(ProdottoConcorsoTransazionePunti pctp :listaInseriti)
            {
                  Log.i("","ID" + pctp.getID_Prodotto());
                  Log.i("","Descrizione" + pctp.getDescrizone());
                  Log.i("","Quantita" + pctp.getQuantitaAcquistata());
            }
             
                listViewR = ( ListView ) findViewById( R.id.listViewRiassunto );
            prod = new ProdottiAdapterResume(getApplicationContext(), R.layout.row_riassunto, listaInseriti);
            listViewR.setAdapter(prod);
        }catch(Exception e)
            {
                Log.i("Errore","L'errore è: " +e.toString());
            }  
           
   
                   caricaProdotti.setOnClickListener(new OnClickListener()
                   {
                         
                                  public void onClick(View v)
                                  {
                                   
                                          Intent intent = new Intent(CaricaPuntiActivity.this,CaricaProdottiActvity.class);
                          Bundle b=new Bundle();
                          b.putSerializable("ArrayProdotti", P);
                          intent.putExtras(b);
                          Bundle b1 = new Bundle();
                          b1.putSerializable("businessInfo",bussInfo);
                          intent.putExtras(b1);
                          startActivity(intent);
                       
                                  }
                       });
                   

Terza Activity:
Codice (Java): [Seleziona]
    public void onCreate(Bundle savedInstanceState)
         {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.caricaprodotti);
                quantita =(EditText)findViewById(R.id.quantita1);
                aggiungi = (Button)findViewById(R.id.aggiungi);
                chiudi = (Button)findViewById(R.id.chiudi);

               
               
                Bundle b=this.getIntent().getExtras();
                P= (ArrayList<ProdottoConcorsiPortale>) b.getSerializable("ArrayProdotti");
             
                Bundle b1 = this.getIntent().getExtras();
                bussInfo =(BusinessInfo) b1.getSerializable("businessInfo");
                Log.i("","intent ricevuti");
               
                ArrayList<String> descrizione = new ArrayList<String>();
               
                for(ProdottoConcorsiPortale p :P)
                {
                        descrizione.add(p.getDescrizione());
                }
               
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,descrizione);
                final Spinner sp = (Spinner) findViewById(R.id.spinner1);
                arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(arrayAdapter);
           
            aggiungi.setOnClickListener(new OnClickListener()
                   {
                         
                          public void onClick(View v)
                          {
                      String nomeProdotto =(String) sp.getSelectedItem();
                      String qta = quantita.getText().toString();
                      double quant = Double.parseDouble(qta.toString());
                     
                   
                      for(ProdottoConcorsiPortale p : P)
                      {
                          ProdottoConcorsoTransazionePunti current = null ;
                          if(nomeProdotto.equalsIgnoreCase(p.getDescrizione()) && quant > 0)
                          {
                                  Log.i("ID","Valore id dell'oggetto selezionato " + p.getId());
                                  current = new ProdottoConcorsoTransazionePunti();
                                  current.setID_Prodotto(p.getId());
                                  current.setQuantitaAcquistata(quant);
                                  current.setDescrizione(p.getDescrizione());
                                  listaInseriti.add(current);
                           }
                         
                          if(nomeProdotto.equalsIgnoreCase(p.getDescrizione()) && quant <= 0)
                          {
                                Toast t =  Toast.makeText(getApplicationContext(),"La quantità non può essere 0.Reinseriscila per favore", Toast.LENGTH_LONG);
                                t.show();
                                quantita.setText("");
                          }
                           
                           
                      }
                      quantita.setText("");
                 
                    listView = ( ListView ) findViewById( R.id.listView1 );
                    prod = new ProdottiAdapter(getApplicationContext(), R.layout.row, listaInseriti);
                        listView.setAdapter(prod);
                   
                     }
                         
                   });   
           
                chiudi.setOnClickListener(new OnClickListener()
                 {
                        public void onClick(View v)
                          {
                                for(ProdottoConcorsoTransazionePunti c : listaInseriti)
                                {
                                        Log.i("","" +c.getID_Prodotto());
                                        Log.i("","" +c.getQuantitaAcquistata());
                                }
                               
                                Log.i("Dimensioni","Lunghezza lista" + listaInseriti.size());
                               
                                Intent intent = new Intent(CaricaProdottiActvity.this,CaricaPuntiActivity.class);
                                Bundle b1 = new Bundle();
                        b1.putSerializable("businessInfo",bussInfo);
                        intent.putExtras(b1);
                                Bundle b2 = new Bundle();
                                b2.putSerializable("ProdottiInseriti", listaInseriti);
                                intent.putExtras(b2);
                                startActivity(intent);
                               
                               
                      }
                 });
           
Logcat:
Codice: [Seleziona]
06-15 06:54:36.578: INFO/ActivityManager(70): Starting: Intent { cmp=com.DoM/.CaricaPuntiActivity (has extras) } from pid 428
06-15 06:54:37.059: INFO/business(428): business valeu123domenicoaumenta
06-15 06:54:37.059: INFO/Intent(428): passati
06-15 06:54:37.069: INFO/(428): Prima lista inserita
06-15 06:54:37.119: INFO/Errore(428): L'errore è: java.lang.NullPointerException
06-15 06:54:38.298: INFO/ActivityManager(70): Displayed com.DoM/.CaricaPuntiActivity: +1s600ms
06-15 06:54:39.258: INFO/ActivityManager(70): Starting: Intent { cmp=com.DoM/.CaricaProdottiActvity (has extras) } from pid 428
06-15 06:54:39.668: INFO/(428): intent ricevuti
06-15 06:54:40.318: INFO/ActivityManager(70): Displayed com.DoM/.CaricaProdottiActvity: +938ms
06-15 06:54:43.019: WARN/KeyCharacterMap(428): No keyboard for id 0
06-15 06:54:43.019: WARN/KeyCharacterMap(428): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-15 06:54:44.398: INFO/ID(428): Valore id dell'oggetto selezionato 2
06-15 06:54:46.919: WARN/InputManagerService(70): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40657770
06-15 06:54:47.298: DEBUG/dalvikvm(245): GC_EXPLICIT freed 6K, 54% free 2543K/5511K, external 716K/1038K, paused 1972ms
06-15 06:54:48.899: INFO/ID(428): Valore id dell'oggetto selezionato 1
06-15 06:54:50.318: INFO/(428): 2
06-15 06:54:50.328: INFO/(428): 5.0
06-15 06:54:50.328: INFO/(428): 1
06-15 06:54:50.338: INFO/(428): 7.0
06-15 06:54:50.348: INFO/Dimensioni(428): Lunghezza lista2
06-15 06:54:50.398: INFO/ActivityManager(70): Starting: Intent { cmp=com.DoM/.CaricaPuntiActivity (has extras) } from pid 428
06-15 06:54:50.668: INFO/business(428): business valeu123domenicoaumenta
06-15 06:54:50.668: INFO/Intent(428): passati
06-15 06:54:50.678: INFO/(428): Prima lista inserita
06-15 06:54:50.769: INFO/Lista(428): Lista Ricevuta da caricaProdotti2
06-15 06:54:50.769: INFO/(428): ID2
06-15 06:54:50.789: INFO/(428): Descrizionecaffè
06-15 06:54:50.789: INFO/(428): Quantita5.0
06-15 06:54:50.799: INFO/(428): ID1
06-15 06:54:50.799: INFO/(428): Descrizionepizza
06-15 06:54:50.819: INFO/(428): Quantita7.0
06-15 06:54:51.038: DEBUG/dalvikvm(428): GC_CONCURRENT freed 379K, 52% free 2811K/5831K, external 912K/1038K, paused 12ms+8ms
06-15 06:54:51.648: INFO/ActivityManager(70): Displayed com.DoM/.CaricaPuntiActivity: +1s163ms
06-15 06:54:53.138: INFO/ActivityManager(70): Starting: Intent { cmp=com.DoM/.CaricaProdottiActvity (has extras) } from pid 428
06-15 06:54:53.368: INFO/(428): intent ricevuti
06-15 06:54:53.368: DEBUG/AndroidRuntime(428): Shutting down VM
06-15 06:54:53.378: WARN/dalvikvm(428): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-15 06:54:53.418: ERROR/AndroidRuntime(428): FATAL EXCEPTION: main
06-15 06:54:53.418: ERROR/AndroidRuntime(428): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.DoM/com.DoM.CaricaProdottiActvity}: java.lang.NullPointerException
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.os.Looper.loop(Looper.java:123)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread.main(ActivityThread.java:3683)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at java.lang.reflect.Method.invokeNative(Native Method)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at java.lang.reflect.Method.invoke(Method.java:507)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at dalvik.system.NativeStart.main(Native Method)
06-15 06:54:53.418: ERROR/AndroidRuntime(428): Caused by: java.lang.NullPointerException
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at com.DoM.CaricaProdottiActvity.onCreate(CaricaProdottiActvity.java:51)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-15 06:54:53.418: ERROR/AndroidRuntime(428):     ... 11 more

L'errore viene segnalato su:
Codice (Java): [Seleziona]
   
    for(ProdottoConcorsiPortale p :P)  //Riga 52 errore
                {
                        descrizione.add(p.getDescrizione());
                }

Ho provato anche a pulire P quando clicco su bottone chiudi,ma non ha funzionato
Codice: [Seleziona]
P.clear()

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Gestione di più actvity
« Risposta #3 il: 15 Giugno 2011, 15:44:19 CEST »
0
Ho risolto mandando dalla terza activity anche l'arrayList<ProdottoConcorsiPortale> P alla seconda activity e così risco ad effettuare il tutto.
Non so se è la soluzione migliore o si può gestire diversamente il passaggio tra 2 activity senza mandarsi ogni volta tutti gli intent,sto studiando il ciclo di vita delle activity in modo tale da gestirle meglio.