2015-09-29 12 views
7

Sto aggiornando la mia app per Android. L'app recupera i dati dal mio server e tra questi dati c'è un ID utente. L'id utente è un numero (intero) ma arriva dal server come una stringa, ad es. "1234". Nella vecchia versione ho quindi salvato questo id utente come una stringa nelle mie preferenze condivise, ma ora che lo sto osservando non mi piace e voglio salvarlo come un intero come dovrebbe essere.Modifica del valore di preferenza condivisa di Android da stringa a Int

Finora piuttosto semplice. Io uso solo putInt/getInt piuttosto che putString/getString. Il problema è che tutte le persone che attualmente utilizzano l'app avranno il valore salvato nelle loro preferenze condivise come una stringa e quando aggiorneranno l'app inizierà la nuova versione dell'app per provare a utilizzare getInt per ottenere il valore che il vecchio versione salvata come stringa.

Qual è il modo migliore per evitare errori a causa di ciò e garantire una transizione uniforme tra le due versioni dell'app?

Grazie.

+6

a braccio, mi piacerebbe aggiungere un frammento di codice in un personalizzato '' Application' onCreate () 'che prova a leggere nell'int. Se fallisce, prova a leggere nella stringa. Se ciò riesce, convertirlo nell'int corrispondente e salvarlo. In questo modo, nel momento in cui il tuo codice "regolare" dell'app ottiene il controllo, le cose dovrebbero essere convertite. Detto questo, personalmente, lo lascerei come una stringa, nel caso in cui decidessi di passare alfanumerico sull'ID utente in futuro. – CommonsWare

+0

In ogni caso, non cambierei il tipo di elemento 'Preferences'. Se vuoi passare a 'int', crea una nuova voce e controlla entrambe. Generalmente creo un wrapper attorno a 'SharedPreferences', quindi questo tipo di modifiche non ha effetto sul mio codice. – Christine

+0

Sì, ho intenzione di andare con @CommonsWare. L'id utente che il server fornisce è un Int nel mio database mySQL quindi non diventerà alfanumerico in qualunque momento presto. Ho accettato la risposta qui sotto da Prexx in quanto fornisce un esempio che potrebbe essere utile per gli altri in seguito. Grazie a tutti. – 365SplendidSuns

risposta

5

Qualcosa del genere nel vostro onCreate:

try{ 
    prefs.getInt("key", 0); 
}catch (ClassCastException e){ 
    Integer uid = Integer.parseInt(prefs.getString("key", null); 
    if(uid != null) 
     prefs.edit().putInt("key", uid).commit(); 
} 
+0

Grazie per l'esempio. Questo è quello che farò. – 365SplendidSuns

0

Prima di tutto convertire si stringa user id in intero come,

int uid=Integer.parseInt("1234");//here is your string user id in place of 1234. 

e poi scrivere uid nella vostra preferenza condiviso con putExtra (chiave, intValue).

questo è tutto.

1

Questa è semplice come

int userid = Integer.parseInt(preferences.getString("userid", "")); 
Problemi correlati