1

Je veux stocker un int pour 2 activités, dans le premier il est chargé et dans l'autre stocké (et chargé pour comparer si c'est toujours le même).L'application se bloque chaque fois qu'une demande SharedPreference est demandée

Activité A:

textView = (TextView) findViewById(R.id.score); 

SharedPreferences preferences = getSharedPreferences("Pref", 0); 
int score = preferences.getInt("Highscore", 0); 
textView.setText(Integer.toString(score)); 

Activité B (dans la partie OnPause()):

SharedPreferences preferences = getSharedPreferences("Pref", 0); 
int pref_score = preferences.getInt("Highscore", 0); 

if (new_score > pref_score) { 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putInt("Highscore", gameView.getScore()); 
    editor.commit(); 
} 

Quand je lance l'application, il se bloque immédiatement. L'activité A est appelée au début, il peut y avoir un problème que rien n'est stocké jusqu'à présent? Si je le commente dans l'activité A, cela fonctionne jusqu'à ce que la fonction onPause() dans B soit appelée (bouton d'accueil).

Modifier Changé tout int, écraser encore logcat

+2

Qu'est-ce que le message logcat? –

+0

@OmarAlfak peut-être que cette ligne est intéressante? 10-01 22: 48: 34,928 513-513 /? I/Gobi: fournisseur/qcom/propriétaire/RIDL/RIDLClient/MainCore.cpp: 1324: Impossible d'obtenir TransState, rc – Niks

+0

Etes-vous sûr que c'est vraiment l'endroit où le crash se produit? –

Répondre

1

Vous utilisez "PutString" et "getInt".
Donc vous l'enregistrez en tant que chaîne, mais essayez de l'obtenir en tant que nombre entier. Donc, il essaie de convertir la chaîne en un Int, donc l'exception ClassCastException.

Vous devez enregistrer et obtenir le même type.

+0

a corrigé celui-là, il claque toujours: [logcat] (https://pastebin.com/raw/qUwcTmT4). Ligne 31 (où l'erreur de distribution est): int score = preferences.getInt ("Highscore", 0); – Niks

+0

Désinstallez littéralement l'application et réinstallez-la, ce qui supprimera les restes SharedPreferences que vous avez sauvegardés (vous avez probablement encore une chaîne enregistrée dans le champ "Highscore") – Moonbloom

+0

Veuillez faire la critique et accepter ma réponse si cela vous a aidé :) – Moonbloom

1

En Activity A vous utilisez preferences.getInt() alors que dans Activity B vous utilisez preferences.edit().putString().

Une fois que vous avez fixé, vous devrez désinstaller/réinstaller votre application ou remplacer la valeur String contenue dans votre SharedPreference ou il sera toujours tomber en panne lorsque vous essayez de l'obtenir par getInt().