Autore Topic: Inserire e salvare piu oggetti  (Letto 1112 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Inserire e salvare piu oggetti
« il: 02 Giugno 2011, 18:19:23 CEST »
0
Ragazzi avrei bisogno di delucidazioni.Io ho un array di prodotti,in un activity devo avere la possibilità di inserirne più di uno,quando dico inserirne intendo in un editText,c'è un modo per farlo?Cioè inserisco un prodotto,poi se volessi inserirne un altro come potrei fare?non posso stabilire a priori quanto prodotti dovrò inserire,quindi non posso creare un interfaccia dell'applicazione statica,ma i serve dinamica.
Suggerimenti?

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Inserire e salvare piu oggetti
« Risposta #1 il: 02 Giugno 2011, 20:54:27 CEST »
0
Se ho capito bene cosa intendi, ti farebbe comodo un ArrayList.

Citazione
Da
ArrayList

Ogni ArrayList ha una capacità. La capacità è la lunghezza dell'array usato per memorizzare gli elementi della lista, e vale almeno la lunghezza della lista. Quando vengono aggiunti elementi alla lista, la sua capacità varia automaticamente.

Per aggiungerlo, potresti usare un pulsante "aggiungi" che salva il prodotto e cancella il testo dell'edittext, oppure far inserire i vari prodotti separati da caratteri tipo virgola o punto e virgola che userai per spezzettare la stringa e trasformarla in un array.
« Ultima modifica: 02 Giugno 2011, 21:07:02 CEST da Verandi »

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Inserire e salvare piu oggetti
« Risposta #2 il: 03 Giugno 2011, 09:05:53 CEST »
0
Se ho capito bene cosa intendi, ti farebbe comodo un ArrayList.

Per aggiungerlo, potresti usare un pulsante "aggiungi" che salva il prodotto e cancella il testo dell'edittext, oppure far inserire i vari prodotti separati da caratteri tipo virgola o punto e virgola che userai per spezzettare la stringa e trasformarla in un array.

Devo usare per forza un array,perchè il metodo che richiamo dal ws chiede un array,in linea di massima è lo stesso,credo che adotterò l'idea di un button che carichi i prodotti,qual'è il comando per cancellare il testo inserito in un editText?

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Inserire e salvare piu oggetti
« Risposta #3 il: 03 Giugno 2011, 09:10:02 CEST »
+1
EditText.setText("")     :-)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Inserire e salvare piu oggetti
« Risposta #4 il: 03 Giugno 2011, 11:45:26 CEST »
0
Ora però ho un altro problema,la fase di caricamento punti va a buon fine,ma quando inserisco l'ultimo prodotto,si cancella l'editText relativo,e a me serve che si pieno quando vado a cliccare il button relativo al caricamento generale.Ho in parte risolto il problema in questo modo:
Button CaricaProdotti mi salvo idProdotto e quantitaAcquistata del prodotto.

Button CaricaPunti,che oltre a prendere le informazioni sui prodotti prende anche altre informazioni,vado a popolare l'editText dell'id prendendo l'ultimo prodotto inserito nell'array(questo riesco a farlo),il problema è per la quantita che è un double e non riesco ad usare il setText:
Codice (Java): [Seleziona]
ID_ProdottoConcorso.setText(prodotti[i].getID_Prodotto()); //questa operazione me la fa fare
                    QuantitaAcquistata.setText(prodotti[i].getQuantitaAcquistata()); //non me lo fa fare
                    QuantitaAcquistata.setText(Double.parseDouble(prodotti[i].getQuantitaAcquistata())); //non me lo fa fare

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Inserire e salvare piu oggetti
« Risposta #5 il: 03 Giugno 2011, 12:12:34 CEST »
0
Ora però ho un altro problema,la fase di caricamento punti va a buon fine,ma quando inserisco l'ultimo prodotto,si cancella l'editText relativo,e a me serve che si pieno quando vado a cliccare il button relativo al caricamento generale.Ho in parte risolto il problema in questo modo:
Button CaricaProdotti mi salvo idProdotto e quantitaAcquistata del prodotto.

Allora, invece di mettere il setText("") quando clicchi il bottone, lo metti in un onClickListener(). In questo modo l'utente inserisce il prodotto, clicca il pulsante e la stringa rimane nell'edittext. Se clicca nuovamente sull'edittext questa si azzera, sennò il prodotto continua a rimanere.  Si porrà poi il problema di cosa succeda se l'utente clicca e non inserisce nulla, e cambiando idea clicchi altrove. Per risolvere, potresti salvare in una stringa temporanea il testo dell'edttext, e risettarla nel caso l'edittext perda il focus e sia vuota.

Citazione
Button CaricaPunti,che oltre a prendere le informazioni sui prodotti prende anche altre informazioni,vado a popolare l'editText dell'id prendendo l'ultimo prodotto inserito nell'array(questo riesco a farlo),il problema è per la quantita che è un double e non riesco ad usare il setText:
Codice (Java): [Seleziona]
ID_ProdottoConcorso.setText(prodotti[i].getID_Prodotto()); //questa operazione me la fa fare
                    QuantitaAcquistata.setText(prodotti[i].getQuantitaAcquistata()); //non me lo fa fare
                    QuantitaAcquistata.setText(Double.parseDouble(prodotti[i].getQuantitaAcquistata())); //non me lo fa fare

Dovrebbe funzionare cambiando in:
Codice (Java): [Seleziona]
ID_ProdottoConcorso.setText(prodotti[i].getID_Prodotto()); //questa operazione me la fa fare
                    QuantitaAcquistata.setText(""+prodotti[i].getQuantitaAcquistata()); //non me lo fa fare
                    QuantitaAcquistata.setText(""+Double.parseDouble(prodotti[i].getQuantitaAcquistata())); //non me lo fa fare
//oppure
                    QuantitaAcquistata.setText(String.valueOf(prodotti[i].getQuantitaAcquistata())); //non me lo fa fare
                    QuantitaAcquistata.setText(String.valueOf(Double.parseDouble(prodotti[i].getQuantitaAcquistata())));

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Inserire e salvare piu oggetti
« Risposta #6 il: 03 Giugno 2011, 17:19:23 CEST »
0
Posto un pò di codice perchè ho vari problemi,questo è il bottone del caricamento dei prodotti:
Codice (Java): [Seleziona]
 caricaProdotti.setOnClickListener(new OnClickListener()
                   {
                                  public void onClick(View v)
                                  {
                                          String idprod = ID_ProdottoConcorso.getText().toString();
                                          String qta = QuantitaAcquistata.getText().toString();
                                          int id = Integer.parseInt(idprod.toString());
                                          double quantita = Double.parseDouble(qta.toString());
                                   
                                     Log.i("ProdottiConcorso","Numero: " +P.size());
                                         prodotti = new ProdottoConcorsoTransazionePunti[P.size()+1];
                                          Log.i("Ho creato l'array"," Sono prima del for");
                                         
                                           for(ProdottoConcorsiPortale p : P)
                                            {
                                                 
                                                   Log.i("Inizio la scansione dei prodotti","Inizio");
                                                   ProdottoConcorsoTransazionePunti current = new ProdottoConcorsoTransazionePunti();
                                           if(id == p.getId() && quantita > 0)
                                             {
                                                   
                                                  current.setID_Prodotto(id);
                                                  Log.i("Controllo id","Ho controllato l'id,VALORE :" + current.getID_Prodotto());
                                                  Log.i("Nome","Descrizione prodotto" + p.getDescrizione());
                                              current.setQuantitaAcquistata(quantita);
                                                  Log.i("QuantitaAcquistata","VALORE :" +current.getQuantitaAcquistata());
                                                  i++;
                                              }
                                           else if(id != p.getId() || quantita < 0)
                                           {
                                                 Toast t =  Toast.makeText(getApplicationContext(),"Errore inserimento parametri",Toast.LENGTH_SHORT);
                                           }
                                           
                                                  prodotti[i] = current;
                                              lastID = prodotti[i].getID_Prodotto();   //variabile d'appoggio ultimo id aggiunto
                                              Log.i("Ultimo prodotto inserito","LASTID" +lastID);
                                              lastQuantita = prodotti[i].getQuantitaAcquistata();//variabile d'appoggio ultima quantita inserita
                                              Log.i("Quantita","LASTQuantita" +lastQuantita);
                                                  ID_ProdottoConcorso.setText("");
                                                  QuantitaAcquistata.setText("");
                                            }
                                          Log.i("Dimensione array","Valori" + prodotti.length);
                                  }
                       });

Il logcat:
Codice: [Seleziona]
06-03 15:01:37.507: INFO/ProdottiConcorso(498): Numero: 2
06-03 15:01:37.507: INFO/Ho creato l'array(498):  Sono prima del for
06-03 15:01:37.517: INFO/Inizio la scansione dei prodotti(498): Inizio
06-03 15:01:37.537: INFO/Ultimo prodotto inserito(498): LASTID0
06-03 15:01:37.537: INFO/Quantita(498): LASTQuantita0.0
06-03 15:01:37.577: INFO/Inizio la scansione dei prodotti(498): Inizio
06-03 15:01:37.577: INFO/Controllo id(498): Ho controllato l'id,VALORE :1
06-03 15:01:37.587: INFO/Nome(498): Descrizione prodottopizza
06-03 15:01:37.587: INFO/QuantitaAcquistata(498): VALORE :2.0
06-03 15:01:37.598: INFO/Ultimo prodotto inserito(498): LASTID1
06-03 15:01:37.598: INFO/Quantita(498): LASTQuantita2.0
06-03 15:01:37.628: INFO/Dimensione array(498): Valori3

Però io inserisco prima idprodotto 1 quantita 2,poi clicco su carica prodotti ed inserisco idprodotto2 e quantita 4,ma mi memorizza solo il primo che metto,sicuramente sbaglio qualcosa nel codice.

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Inserire e salvare piu oggetti
« Risposta #7 il: 06 Giugno 2011, 16:48:15 CEST »
0
Risolto in parte il problema dell'inserimento dei prodotti,ho adottato questa idea.
Ho creato un bottone caricaProdotti,nel quale passo i primi prodotti da inserire,quando me ne manca uno da inserire lo faccio caricare con un altro bottone che mi fa partire una chiamata al ws.Il problema sorge nel momento in cui devo inserire un solo prodotto,dovendo inserire un solo prodottoeffettuo l'operazione con il secondo bottone,quello del caricamento generale,ma l'applicazione crasha,questo è il codice:
Codice (Java): [Seleziona]
 caricaProdotti.setOnClickListener(new OnClickListener()
                   {
                         
                                  public void onClick(View v)
                                  {
                                    try{
                                           idprod = ID_ProdottoConcorso.getText().toString();
                                           qta = QuantitaAcquistata.getText().toString();
                                           id = Integer.parseInt(idprod.toString());
                                           quantita = Double.parseDouble(qta.toString());
                                      Log.i("Valore ID","ID INserito" +id);
                                      Log.i("Quantita","Quantita Inserita" +id);
                                     Log.i("ProdottiConcorso","Numero: " +P.size());
                                     ListaProdotti = new ProdottoConcorsoTransazionePunti[P.size()+1];
                                          Log.i("Ho creato l'array"," Sono prima del for");
                                 
                                   for(ProdottoConcorsiPortale p : P)
                                            {
                                                 
                                                   Log.i("Inizio la scansione dei prodotti","Inizio");
                                                   ProdottoConcorsoTransazionePunti current ;
                                               if(p.getId() == id && quantita > 0)
                                                 {
                                                   Log.i("IF","SONO NELL'IF");
                                                  current = new ProdottoConcorsoTransazionePunti(id,quantita);
                                                  ListaProdotti[i] = current;
                                                //  current.setID_Prodotto(id);
                                                  Log.i("Controllo id","Ho controllato l'id,VALORE :" + current.getID_Prodotto());
                                                  Log.i("Nome","Descrizione prodotto" + p.getDescrizione());
                                                  //current.setQuantitaAcquistata(quantita);
                                                  Log.i("QuantitaAcquistata","VALORE :" +current.getQuantitaAcquistata());
                                                   i++;
                                                  }
                                                if(p.getId() != id || quantita < 0)
                                               {
                                                 Toast t =  Toast.makeText(getApplicationContext(),"Errore inserimento parametri",Toast.LENGTH_SHORT);
                                               }
                       
                                           
                                              ID_ProdottoConcorso.setText("");
                                                  QuantitaAcquistata.setText("");
                                                 
                                            }
                                  }catch(Exception e)
                                  {
                                          Log.i("Errore","L'errore è :"+e.toString());
                                   }
                                  }
                                   
                       });
                   
                   carica.setOnClickListener(new OnClickListener()
                   {
                           
                          public void onClick(View v)
                          {                      
                                   
                                  String num_carta = codiceCarta.getText().toString();
                                  String imp = importo.getText().toString();
                              idprod = ID_ProdottoConcorso.getText().toString();
                                  qta = QuantitaAcquistata.getText().toString();
                                  id = Integer.parseInt(idprod.toString());
                                  quantita = Double.parseDouble(qta.toString());
                                  ProdottoConcorsoTransazionePunti last = new ProdottoConcorsoTransazionePunti(id,quantita);
                                 
                                  for(ProdottoConcorsiPortale p : P)
                                  {
                                          if(p.getId() == last.getID_Prodotto())
                                          {
                                                  ListaProdotti[i] = last;
                                          }
                                  }
                                  Log.i("LunghezzaArray","Dimensione" + ListaProdotti.length);

Questo è il log:
Codice: [Seleziona]
06-06 14:45:57.561: WARN/dalvikvm(689): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-06 14:45:57.580: ERROR/AndroidRuntime(689): FATAL EXCEPTION: main
06-06 14:45:57.580: ERROR/AndroidRuntime(689): java.lang.NullPointerException
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at com.DoM.CaricaPuntiActivity$2.onClick(CaricaPuntiActivity.java:146)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.view.View.performClick(View.java:2408)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.view.View$PerformClick.run(View.java:8816)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.os.Handler.handleCallback(Handler.java:587)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.os.Looper.loop(Looper.java:123)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at java.lang.reflect.Method.invokeNative(Native Method)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at java.lang.reflect.Method.invoke(Method.java:521)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-06 14:45:57.580: ERROR/AndroidRuntime(689):     at dalvik.system.NativeStart.main(Native Method)

Tra le altre cose non parte neanche il Toast se sbaglio l'inserimento nel bottono del caricamentoProdotti eppure dovrebbe essere dichiarato bene,o sbaglio

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Inserire e salvare piu oggetti
« Risposta #8 il: 06 Giugno 2011, 16:51:51 CEST »
+1
Il Toast non parte perché ti sei dimenticato di inserire il metodo .show() alla fine. :)
Dando un'occhiata veloce al codice, mi pare che tu inizializzi l'array ListaProdotti nel listener del primo pulsante. Quando carichi un solo prodotto, e, se ho capito bene lo fai con il secondo pulsante, credo sia il ListaProdotti = last a darti il nullPointerException, in quanto, non avendo premuto il primo pulsante, non hai inizializzato l'array ListaProdotti.
« Ultima modifica: 06 Giugno 2011, 17:42:33 CEST da Verandi »

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Inserire e salvare piu oggetti
« Risposta #9 il: 06 Giugno 2011, 16:59:22 CEST »
0
Il Toast non parte perché ti sei dimenticato di inserire il metodo .show() alla fine. :)

Che stupido che sono,per quanto riguarda l'altro problema?Qualche suggerimento?

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:Inserire e salvare piu oggetti
« Risposta #10 il: 06 Giugno 2011, 17:35:36 CEST »
+1
Sicuro che il LogCat sia completo? Comunque qui:

Codice: [Seleziona]
CaricaPuntiActivity.java - riga 146
che hai di preciso?
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:Inserire e salvare piu oggetti
« Risposta #11 il: 06 Giugno 2011, 18:06:17 CEST »
0
Il Toast non parte perché ti sei dimenticato di inserire il metodo .show() alla fine. :)
Dando un'occhiata veloce al codice, mi pare che tu inizializzi l'array ListaProdotti nel listener del primo pulsante. Quando carichi un solo prodotto, e, se ho capito bene lo fai con il secondo pulsante, credo sia il ListaProdotti = last a darti il nullPointerException, in quanto, non avendo premuto il primo pulsante, non hai inizializzato l'array ListaProdotti.


Si l'errore era quello,ho inizializzato ListaProdotti fuori dal button e funziona alla grande,vi ringrazio entrambi i due suggerimenti insieme sono stati molto utili.