Autore Topic: Problemi con li SharedPreferences  (Letto 815 volte)

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Problemi con li SharedPreferences
« il: 21 Luglio 2014, 12:54:45 CEST »
0
Salve a tutti,
da poco ho pubblicato il mio primo giochino per Android  :D dopo quasi diversi mesi di lavoro. Adesso pare ci sia gia un bug ovvero sulle impostazioni salvate tramite gli SharedPreferences (ad esempio i record di punti, la lingua impostata, lo sfondo della plancia di gioco, ecc.. ). Il bug consiste che, al secondo avvio del gioco (al primo funziona tutto), le impostazioni caricate con li SharedPreferences si sballano. Ad esempio succede che la lingua viene settata in inglese e lo sfondo della plancia di gioco cambia (senza che al primo avvio cambio le impostazioni della lingua e dello sfondo), ovviamente si sballano anche il resto delle impostazioni.
Anche durante le fasi di debug ha dato lo stesso problema, ma non capitava spesso e stranamente il logcat non dava particolari info o errori quando succedeva.
Sapete come potrei risolvere? Perche se non riesco, avrei pensato di utilizzare il classico metodo dei File ovvero, ad ogni salvataggio si scrivono i relativi dati in un file di testo per poi leggerli successivamente quando devo caricare le impostazioni (ad ogni avvio del gioco), anche se non mi sembra un metodo molto efficiente.
 

Offline Rino63

  • Utente normale
  • ***
  • Post: 162
  • Respect: +3
    • Mostra profilo
Re:Problemi con li SharedPreferences
« Risposta #1 il: 21 Luglio 2014, 13:15:09 CEST »
0
le info sono poche però propenderei per un errore di salvataggio. cosa succede al terzo avvio senza salvare e poi salvando? annotando i comportamenti si potrebbe risalire al bug. a me sembra un errore tipo uno switch sbagliato... ma è impossibile dire di +

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #2 il: 21 Luglio 2014, 13:37:54 CEST »
0
Provo adesso ad un terzo avvio anche se potrei escludere certi problemi con if e determinati controlli.
Comunque riporto alcuni pezzi di codice:

Nella classe Principale.java c'è il menu principale del gioco e le funzioni per caricare le impostazioni. Il caricamento è dentro un metodo che viene poi chiamato nell'OnCreate prima di caricare il menu principale:
Codice (Java): [Seleziona]
SharedPreferences prefs = getSharedPreferences(Generici.MY_PREFERENCES, Context.MODE_PRIVATE);
Generici.audio = prefs.getString(Generici.TEXT_DATA_AUDIO, Generici.audio);
Generici.musica = prefs.getString(Generici.TEXT_DATA_MUSIC, Generici.musica);
Generici.lingua = prefs.getString(Generici.TEXT_DATA_LG, Generici.lingua);
Generici.scenario = prefs.getString(Generici.TEXT_DATA_SCENES, Generici.scenario);
Generici.arma = prefs.getString(Generici.TEXT_DATA_WEAPONS, Generici.arma);

Invece le funzioni di salvataggio delle opzioni sono dentro ad un'altra classe java che sarebbe il menu delle impostazioni del gioco (tutte le opzioni del gioco vengono gestite in questa classe). In seguito ecco il pezzo di codice delle funzioni di salvataggio (dentro un metodo che poi viene chiamato quando si preme un bottone).
Codice (Java): [Seleziona]
        SharedPreferences prefs = getSharedPreferences(Generici.MY_PREFERENCES, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(Generici.TEXT_DATA_AUDIO, Generici.audio);
        editor.putString(Generici.TEXT_DATA_MUSIC, Generici.musica);
        editor.putString(Generici.TEXT_DATA_LG, Generici.lingua);
        editor.putString(Generici.TEXT_DATA_SCENES, Generici.scenario);
        editor.putString(Generici.TEXT_DATA_WEAPONS, Generici.arma);
        editor.putString(Generici.DATA_SWITCH_AUDIO, Generici.audio);
        editor.putString(Generici.DATA_SWITCH_MUSIC, Generici.musica);
        editor.putString(Generici.DATA_RBUTTON_LG, Generici.lingua);
        editor.putString(Generici.DATA_RBUTTON_SCENES, Generici.scenario);
        editor.putString(Generici.DATA_RBUTTON_WEAPONS, Generici.arma);
        editor.commit();

Ovviamente quello del record punti ha lo stesso sistema ma è gestito su un'altra classe java che non vi elenco per evitare di allungare il post e che poi stranamente pare funzionare correttamente.
Vi elenco invece un pezzo di codice della classe Generici.java contenente tutte le costanti "globali" di tipo String utilizzate per salvare appunto le impostazioni del gioco:
Codice (Java): [Seleziona]
    public final static String MY_PREFERENCES = "MyPref";

    public final static String TEXT_DATA_AUDIO = "textDataAudio";
    public final static String TEXT_DATA_MUSIC = "textDataMusic";
    public final static String TEXT_DATA_LG = "textDataLanguage";
    public final static String TEXT_DATA_SCENES = "textDataScenes";
    public final static String TEXT_DATA_WEAPONS = "textDataHammers";
    public final static String DATA_SWITCH_AUDIO = "switchAudio";
    public final static String DATA_SWITCH_MUSIC = "switchMusic";
    public final static String DATA_RBUTTON_LG = "radioButton";
    public final static String DATA_RBUTTON_SCENES = "radioScenes";
    public final static String DATA_RBUTTON_WEAPONS = "radioHammers";

    public static String audio = "SI";
    public static String musica = "SI";
    public static String lingua = "Italiano";
    public static String scenario = "Classico";
    public static String arma = "Classica";
« Ultima modifica: 21 Luglio 2014, 13:39:39 CEST da Twist3rEv0 »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problemi con li SharedPreferences
« Risposta #3 il: 21 Luglio 2014, 14:22:36 CEST »
0
Guarda ho dato solo un occhiata veloce, però mi suona strano quello che fai.

Codice (Java): [Seleziona]
Generici.audio = prefs.getString(Generici.TEXT_DATA_AUDIO, Generici.audio);
assegni ad audio quello che c'e' nelle preferenze altrimenti audio = audio.

Poi essendo statiche le variabili non vorrei che facesse casino...

Il mio consiglio è metti i valori di default da una parte ed i valori da usare da un'altra parte.
I numeri contano molto di più del seme.

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #4 il: 21 Luglio 2014, 16:27:11 CEST »
0
Guarda ho dato solo un occhiata veloce, però mi suona strano quello che fai.

Codice (Java): [Seleziona]
Generici.audio = prefs.getString(Generici.TEXT_DATA_AUDIO, Generici.audio);
assegni ad audio quello che c'e' nelle preferenze altrimenti audio = audio.

Poi essendo statiche le variabili non vorrei che facesse casino...

Il mio consiglio è metti i valori di default da una parte ed i valori da usare da un'altra parte.

Ho fatto in questo modo per evitare di usare altre variabili ma magari forse è questo il problema. Provo a questo punto a mettere direttamente una String nel default senza usare variabili o costanti gia esistenti.

Post unito: [time]21 Luglio 2014, 19:11:45 CEST[/time]
Ho appena provato sistemando un po' il codice, intanto sull'emulatore funziona senza problemi ma sul dispositivo fisico (galaxy s4), dopo il terzo e quarto avvio, comincia a sballarsi. Secondo me dovrei usare il classico metodo dei File, ovvero, salvando punteggi e opzioni su un file di testo per poi leggerli successivamente quando c'è bisogno di caricarli, voi che ne dite?  :-)
« Ultima modifica: 21 Luglio 2014, 19:12:31 CEST da Twist3rEv0, Reason: Merged DoublePost »

Offline Rino63

  • Utente normale
  • ***
  • Post: 162
  • Respect: +3
    • Mostra profilo
Re:Problemi con li SharedPreferences
« Risposta #5 il: 21 Luglio 2014, 20:52:04 CEST »
0
mmm forse ci starei attento. ho letto un po' delle nuove features di kitkat per il salvataggio file e mi hanno preoccupato. non sapendo google che strada prenderà in futuro io mi baserei sulle shared

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #6 il: 21 Luglio 2014, 21:10:11 CEST »
0
A me sti shared stanno dando solo problemi, con tutto che sono pratici nell'utilizzo. Non so proprio come risolvere cioe ho controllato pure gli if con gli equals (essendo tipi string) magari devo impostare bene sto shared ma sono tutti gestiti da tipi stringa.
In pratica è come se non salvasse le impostazioni, dopo il secondo avvio si comincia a sfasare tutto. Forse il problema sta nel caricamento, devo ancora verificare....

ps: i tipi stringa sarebbero quelle costanti sulla classe Generici.java, scusate se sono stato poco chiaro ma sto impazzendo per capire solo come risolvere.
« Ultima modifica: 21 Luglio 2014, 21:12:11 CEST da Twist3rEv0 »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problemi con li SharedPreferences
« Risposta #7 il: 22 Luglio 2014, 07:53:55 CEST »
0
Ma guarda io con le shared preferences non ho mai avuto problemi, anzi le ho sempre trovate così comode.

Secondo me dovresti usare solo i Generici.java come default e li assegni ad una variabile temporanea quando ne hai bisogno.
I numeri contano molto di più del seme.

Offline Rino63

  • Utente normale
  • ***
  • Post: 162
  • Respect: +3
    • Mostra profilo
Re:Problemi con li SharedPreferences
« Risposta #8 il: 22 Luglio 2014, 08:46:44 CEST »
0
Ma guarda io con le shared preferences non ho mai avuto problemi, anzi le ho sempre trovate così comode.

Secondo me dovresti usare solo i Generici.java come default e li assegni ad una variabile temporanea quando ne hai bisogno.

in realtà le due/tre volte che le ho usate ho fatto così. mettevo il valore letto in una variabile e via. nessun problema. al limite se proprio vuoi potresti mettere tutto in un db, partire con la copia dagli asset in modo da avere dei valori di default predefiniti e la vorare con gli update.

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #9 il: 22 Luglio 2014, 15:36:09 CEST »
0
Ho provato in tutti i modi, pure ripulendo le variabili utilizzate dagli shared alla chiusura dell'app, ma da li stessi problemi sempre dopo il secondo avvio, come se ci sono troppi dati salvati e li shared li sballano (pero stranamente lo fa solo con alcuni dati, non con tutti).
Non rimane che provare con un piccolo database locale e vedere se magari si risolve, come dice Rino63.  ;-)

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problemi con li SharedPreferences
« Risposta #10 il: 23 Luglio 2014, 08:32:10 CEST »
0
Per delle preferences così semplici secondo me non vale la pena di allestire un db.
Sei sicuro di aver fatto correttamente? Non è che cancelli i dati fra una prova e l'altra?
Casomai metti il codice finale cosi' do un occhio per vedere se c'e' qualche cosa che non va.
I numeri contano molto di più del seme.

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #11 il: 23 Luglio 2014, 15:28:41 CEST »
0
I dati li cancellavo solo quando riuppavo l'app tramite adb sul mio galaxy s4. Ma comunque, essendo che il db sembra un po' scomodo, forse è meglio che riprovo con gli shared però stavolta rifaccio tutto il sistema di salvataggio, magari c'è qualche riferimento ripetuto piu volte che non riesco a trovare.
« Ultima modifica: 23 Luglio 2014, 15:31:28 CEST da Twist3rEv0 »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problemi con li SharedPreferences
« Risposta #12 il: 23 Luglio 2014, 15:42:28 CEST »
0
Eh appunto se posti il codice completo dell'accesso/scrittura delle shared preferences magari possiamo aiutarti.
I numeri contano molto di più del seme.

Offline Twist3rEv0

  • Nuovo arrivato
  • *
  • Post: 44
  • Respect: 0
    • Mostra profilo
    • Giulio Web
  • Dispositivo Android:
    Samsung Galaxy S4
  • Play Store ID:
    Giulio Giarratana
  • Sistema operativo:
    Windows 8.1, Xubuntu 14
Re:Problemi con li SharedPreferences
« Risposta #13 il: 23 Luglio 2014, 16:36:50 CEST »
0
Al momento ho l'Android Studio in aggiornamento  :-( , comunque si potrebbero utilizzare tipi int sui dati per poi convertirli in String per essere salvati con gli shared?

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problemi con li SharedPreferences
« Risposta #14 il: 24 Luglio 2014, 07:37:28 CEST »
0
Se ti servono delle String salva String altrimenti salva int.
I numeri contano molto di più del seme.