Нет такого поля экземпляра

Я пытаюсь, чтобы мое приложение сохраняло некоторые данные, когда ориентация экрана была изменена с помощью onSaveInstanceState чтобы сохранить логическое значение mCheated .

Я установил многочисленные точки mCheated и получаю ошибку для mCheated логического значения в представлении переменных

 mCheated= No such instance field: 'mCheated' 

Я не знаю, почему, когда я объявляю его со значением false при запуске действия и изменяет его на true, если нажата кнопка. Может кто-нибудь мне помочь?

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

Оказывается, с кодом не было проблем, и Android Studio потребовала перезагрузки. Я думаю, что это было связано с тем, что я клонировал проект и, возможно, использовал неправильный файл из предыдущей версии.

Я получил ту же ошибку, и я потратил 3-4 часа на то, чтобы решить ту же ошибку, наконец, я узнал, почему это произошло, и это было интересно

  1. В моем случае я изменил код в одном файле (я объявил одну переменную и инициализировал ее)

  2. Я запустил apk с моего устройства и подключил отладчик из андроид-студии

  3. Я установил точку отладки для новой добавленной переменной, где я назначил ей данные

  4. Но во время отладки он показывает мне ту же ошибку

  5. То я узнал, что я изменил d-код в файле, но я запустил apk с устройства, и я подключил отладчик, мне нужно скомпилировать и запустить изменения вместо него, как он будет отражать в apk, что было актуальной проблемой

  6. Поэтому я скомпилировал и запустил код и установил недавно скомпилированный apk на устройство, после чего я подключил отладчик, и он работал для меня

Надеюсь, это спасет чье-то время

Если вы используете pro-guard и обфускация, это правда. Вы должны прокомментировать обфускацию в градиенте построения

Например: добавьте это в pro-guard -dontobfuscate

Проверьте, имеет ли ваш вариант сборки в Android Studio

  • Отлаживаемый как истинный
  • Proguard отключен или закомментирован.

У меня была такая же ошибка. Решение этой ошибки заключается в отключении Proguard в файле build.gradle.

  debug { minifyEnabled false }