web-dev-qa-db-fra.com

Aucune instance de ce type

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);
    }
}
12
algorhythm

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.

20
algorhythm

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.

  1. Dans mon cas, j'ai changé le code dans un fichier (j'ai déclaré une variable et l'initialisé)

  2. Je lance l'apk depuis mon appareil et le débogueur attaché depuis le studio Android

  3. Je fixe le point de débogage à cette variable nouvellement ajoutée à laquelle j'ai attribué des données

  4. mais pendant le débogage, il me montre la même erreur 

  5. 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.

  6. 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

6
Ali

Vérifiez si votre variante de construction dans Android Studio a

  • debuggable as true
  • proguard est désactivé ou mis en commentaire.
4
Amiit

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
}
1
Akash Bisariya

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. 

0
isles1217