Autore Topic: onSaveInstanceState(Bundle outState) e le sue stranezze  (Letto 598 volte)

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
onSaveInstanceState(Bundle outState) e le sue stranezze
« il: 01 Maggio 2014, 19:11:12 CEST »
0
Sicuramente sono io che sbaglio qualcosa, ma nel momento in cui passo al outState un array di double[] questo viene modificato.....
Ad esempio

se l'array contenesse 0,0,1,2,3,4,5

diventa 0,1,2,3,4,5,5 e ancora 1,2,3,4,5,5,5 e poi 2,3,4,5,5,5,5 :'( :'( :'(
ormai sono diventato pazzo... ???
Secondo voi cosa accade quando viene chiamato onSaveIstanceState????

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:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #1 il: 01 Maggio 2014, 19:15:49 CEST »
0
codice?  :D
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #2 il: 01 Maggio 2014, 19:16:48 CEST »
0
sono 500 righe di codice e non posso manco divulgarlo... a meno che di parlare in privato

Post unito: [time]01 Maggio 2014, 19:21:48 CEST[/time]
questa è la parte incriminata

Codice (Java): [Seleziona]
@Override
        protected void onSaveInstanceState(Bundle outState) {
                // TODO Auto-generated method stub
                super.onSaveInstanceState(outState);
                outState.putString("path", path);
                outState.putFloat("x", x);
                outState.putFloat("x1", x1);
                outState.putFloat("y", y);
                outState.putFloat("y1", y1);
                outState.putString("frame", Frame);
                outState.putInt("box", numeroBox);
                outState.putFloat("deep", deep);
                outState.putFloat("h", height);
                outState.putStringArrayList("mis", mis);
                outState.putDouble("depth", depth);
                outState.putDoubleArray("angoli", spinnerAng);
        }

qui ricevo

Codice (Java): [Seleziona]
...if (savedInstanceState != null) {
                        path = savedInstanceState.getString("path");
                        x = savedInstanceState.getFloat("x");
                        y = savedInstanceState.getFloat("y");
                        x1 = savedInstanceState.getFloat("x1");
                        y1 = savedInstanceState.getFloat("y1");
                        mis = savedInstanceState.getStringArrayList("mis");
                        numeroBox = savedInstanceState.getInt("box");
                        Frame = savedInstanceState.getString("frame");
                        deep = savedInstanceState.getFloat("deep");
                        height = savedInstanceState.getFloat("h");
                        depth = savedInstanceState.getDouble("depth");
                        spinnerAng = savedInstanceState.getDoubleArray("angoli");...
« Ultima modifica: 01 Maggio 2014, 19:25:56 CEST da R0om »

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:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #3 il: 01 Maggio 2014, 19:22:02 CEST »
0
sono 500 righe di codice e non posso manco divulgarlo... a meno che di parlare in privato

No no, niente privato.

Posta almeno le righe in cui metti i dati nel Bundle e quelle dove prendi i dati dal Bundle. Se non puoi postare neanche quelle, eheh, difficile aiutarti senza palla di vetro.  :D
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #4 il: 01 Maggio 2014, 19:26:05 CEST »
0
fatto

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:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #5 il: 01 Maggio 2014, 19:37:52 CEST »
0
Mmmm, non vedo cose strane.

Immagino tu abbia già verificato che l'array ricevuto è letto nel modo corretto (esempio rimpiazzando la lettura dal Bundle con una sequenza creata sul momento).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #6 il: 01 Maggio 2014, 19:39:40 CEST »
0
non ho ben capito cosa intendi cmq, ho notato che se stampo l'array dopo onsaveistance già lì è "impazzito" è come se scalasse ogni volta di una posizione!!!!

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:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #7 il: 02 Maggio 2014, 10:33:37 CEST »
0
non ho ben capito cosa intendi cmq, ho notato che se stampo l'array dopo onsaveistance già lì è "impazzito" è come se scalasse ogni volta di una posizione!!!!

Per questo probabilmente l'errore non è nel passaggio dei dati, ma altrove nell'applicazione. Prova a risalire nell'esecuzione, per capire a che punto si corrompe.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #8 il: 02 Maggio 2014, 11:25:43 CEST »
0
L'aaplicazione funziona perfettamente, nel momento in cui giro lo schermo sul onsaveistance mi salva un array di double scalato.... Ora faccio un altra prova, ma volevo chiedere... se prima di passare l'array lo infilo in un ArrayList<double>?

Post unito: 02 Maggio 2014, 13:44:53 CEST
Ho trovato l'errore ma non riesco a capire perchè.
Codice (Java): [Seleziona]
s4.setOnItemSelectedListener(new OnItemSelectedListener() {

                                        public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) {
                                                String s = (String)arg0.getItemAtPosition(arg2);
                                                String s1 = s.replace("\"","");
                                                s1.trim();
                                                double g = 0;
                                                g = Double.parseDouble(s1);
                                                if(tr.getId()!=0)
                                                        spinAng[tr.getId()-1] = g;
                                               
                                        }

                                        public void onNothingSelected(AdapterView<?> arg0) {
                                                       
                                        }
                                       
                                });
in pratica è come se quando fa l'onsaveInstance mi esegue spinAng[tr.getId()-1].... HELP ME
« Ultima modifica: 02 Maggio 2014, 13:44:53 CEST da R0om, Reason: Merged DoublePost »

Offline ivan84

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sony xperia s
  • Sistema operativo:
    win 7 e ubuntu 12.04
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #9 il: 02 Maggio 2014, 17:04:17 CEST »
0
Da quello che hai scritto non si capisce bene cosa vuoi fare,cmq se devi passare dei dati salvati hai pensato ad usare le sharedpreferences al posto dei bundle,più semplice e elegante secondo me.
Inoltre usare i tipi generics e arraylist<> al posto degli array è sicuramente meglio nel contesto del passaggio di dati anche se nel tuo caso non penso proprio che il problema dipenda da quello

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #10 il: 02 Maggio 2014, 17:34:25 CEST »
0
in pratica è come se quando fa l'onsaveInstance mi esegue spinAng[tr.getId()-1].... HELP ME

Se s4 è uno spinner, allora la cosa ha senso.
Il metodo OnItemSelected è chiamato durante l'inizializzazione dello spinner.

Da quello che hai scritto non si capisce bene cosa vuoi fare,cmq se devi passare dei dati salvati hai pensato ad usare le sharedpreferences al posto dei bundle,più semplice e elegante secondo me.
Beh insomma su questo non sono molto d'accordo.

Offline ivan84

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sony xperia s
  • Sistema operativo:
    win 7 e ubuntu 12.04
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #11 il: 02 Maggio 2014, 17:46:51 CEST »
0
Citazione
Beh insomma su questo non sono molto d'accordo.

Beh io è solo una settimana che ho cominciato a smanettare con android ma ogni volta per passare dati preferisco usare le shared preferences invece dei bundle perchè spesso quei dati mi servono anche ad una successiva apertura della mia app,ma sarebbe bello se mi spiegassi perchè essendo io un novello mi piacerebbe apprendere!Grazie! :-)

Offline R0om

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus tf101g
  • Sistema operativo:
    windows8
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #12 il: 02 Maggio 2014, 18:06:52 CEST »
0
Se s4 è uno spinner, allora la cosa ha senso.
Il metodo OnItemSelected è chiamato durante l'inizializzazione dello spinner.
si ma se io non seleziono nulla perchè quando richiama L'onSaveInstanceState mi cambia l'array?

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #13 il: 02 Maggio 2014, 18:48:06 CEST »
0
si ma se io non seleziono nulla perchè quando richiama L'onSaveInstanceState mi cambia l'array?

Vai in debug su quel metodo.
Hai postato solo alcune porzioni e non ho capito se l'array viene scritto male prima, o viene cambiato poi.

Beh io è solo una settimana che ho cominciato a smanettare con android ma ogni volta per passare dati preferisco usare le shared preferences invece dei bundle perchè spesso quei dati mi servono anche ad una successiva apertura della mia app,ma sarebbe bello se mi spiegassi perchè essendo io un novello mi piacerebbe apprendere!Grazie! :-)
Le shared preferences non sono altro che un file xml dove i valori vengono salvati con chiave=valore.
Sono usate per salvare dati in modo persistente, un caso banale sono le preferenze dell'app.
Quindi se l'esigenza è avere disponibili quei dati all'apertura dell'app, la scelta è buona.

Se invece le utilizzi per salvare dei dati in una rotazione dello schermo, sarebbe meglio utilizzare il bundle che viene predisposto dal framework stesso di Android.

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:onSaveInstanceState(Bundle outState) e le sue stranezze
« Risposta #14 il: 02 Maggio 2014, 18:50:35 CEST »
0
Non credo ti "cambi" l'array sull'onSaveInstanceState...ma piuttosto quando ricrei la UI sull'onCreate.
Mi sfugge questo :
Codice (Java): [Seleziona]
if(tr.getId()!=0) spinAng[tr.getId()-1] = g;Dato che non vedo "tr" dentro la dichiarazione dell'interfaccia OnItemSelectedListener, immagino sia una istanza dichiarata al di fuori...e non sapendo cosa sia...
Diciamo che il codice è un po' incompleto per aiutarti. Oltretutto onSaveInstanceState viene chiamato quando l'app stà per essere "killata", quindi è una situazione non del tutto prevedibile che non rientra nel ciclo di vita dell'Activity.
Se non vuoi mostrare il codice sorgente, potresti riscrivere una porzione di esso con variabili fittizie.