J'essaie de faire enregistrer certaines données dans mon application lorsque l'orientation de l'écran est modifiée à l'aide de onSaveInstanceState
pour enregistrer une valeur booléenne mCheated
.
J'ai défini de nombreux points d'arrêt et j'obtiens une erreur pour la valeur mCheated
boolean dans la vue des variables
mCheated= No such instance field: 'mCheated'
Je ne sais pas pourquoi, car je la déclare avec une valeur false lorsque l'activité est démarrée et la remplace par true si un bouton est enfoncé. Quelqu'un peut m'aider?
package com.bignerdranch.Android.geoquiz;
import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;
/**
* Created by Chris on 20/02/2015.
*/
public class CheatActivity extends Activity {
public static final String EXTRA_ANSWER_IS_TRUE = "com.bignerdranch.Android.geoquiz.answer_is_true";
public static final String EXTRA_ANSWER_SHOWN = "com.bignerdranch.Android.geoquiz.answer_shown";
private static final String KEY_INDEX = "index";
private boolean mAnswerIsTrue;
private TextView mAnswerTextView;
private Button mShowAnswer;
private boolean mCheated = false;
private void setAnswerShownResult(boolean isAnswerShown) {
Intent data = new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
setResult(RESULT_OK, data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cheat);
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE,false);
if (savedInstanceState != null){
mCheated = savedInstanceState.getBoolean(KEY_INDEX, mCheated);
}
setAnswerShownResult(mCheated);
mAnswerTextView = (TextView)findViewById(R.id.answerTextView);
mShowAnswer = (Button)findViewById(R.id.showAnswerButton);
mShowAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mAnswerIsTrue) {
mAnswerTextView.setText(R.string.true_button);
}
else {
mAnswerTextView.setText(R.string.false_button);
}
setAnswerShownResult(true);
mCheated = true;
}
});
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
//Log.i(TAG, "onSaveInstanceState");
savedInstanceState.putBoolean(KEY_INDEX, mCheated);
}
}
Il s'avère que le code ne posait pas de problème et qu'Android Studio nécessitait un redémarrage. Je pense que c'était dû au fait que j'avais cloné le projet et que j'utilisais peut-être un fichier incorrect de la version précédente.
J'ai eu la même erreur et j'ai perdu mes 3-4 heures à résoudre la même erreur. J'ai enfin compris pourquoi c'était arrivé et c'était intéressant.
Dans mon cas, j'ai changé le code dans un fichier (j'ai déclaré une variable et l'initialisé)
Je lance l'apk depuis mon appareil et le débogueur attaché depuis le studio Android
Je fixe le point de débogage à cette variable nouvellement ajoutée à laquelle j'ai attribué des données
mais pendant le débogage, il me montre la même erreur
Ensuite, j'ai appris que j'avais modifié le code dans le fichier, mais que je lance l'apk depuis un périphérique et que j'ai attaché le débogueur dont j'ai besoin pour compiler et exécuter les modifications à la place.
Donc, j'ai compilé et exécuté le code et installé apk nouvellement compilé sur le périphérique, puis j'ai attaché le débogueur et cela a fonctionné pour moi
j'espère que cela sauvera du temps à quelqu'un
Si vous utilisez pro-guard et que l'obscurcissement est vrai ..__, vous devez commenter l'obscurcissement en construction
exemple: ajoutez ceci dans le -dontobfuscate
pro-guard
Vérifiez si votre variante de construction dans Android Studio a
J'ai eu la même erreur .. La solution à l'erreur est de désactiver le fichier Proguard dans le fichier build.gradle
debug {
minifyEnabled false
}
Au cas où cela s'avérerait utile pour quelqu'un d'autre, j'ai pu résoudre ce problème immédiatement après avoir réalisé que j'étais en mode 'Release', pas en mode 'Debug', dans la section Variantes de construction.