亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么對象在 RestoreInstanceState 上拋出 nullPointe

為什么對象在 RestoreInstanceState 上拋出 nullPointe

LEATH 2023-07-19 10:09:18
我的 android 應用程序中有一個 TextView 和 ImageButton 對象,它們在應用程序啟動(onCreate)時正確顯示,但是當調用 saveInstanceState() 和 RestoreInstanceState() 時,編譯器會拋出 nullPointerException (即使它們的狀態已正確加載)我嘗試設置文本或任何與此相關的內容。我還有一些其他 ImageButtons 兩次都正確顯示(在第一次 onCreate 時,以及在調用 RestoreInstanceState 時),所以它讓我更加困惑。我曾嘗試創建 TextView 的另一個實例,為其設置 Text,然后將該 TextView 設置為原始實例,但它不起作用。public class MainActivity extends AppCompatActivity {    private TextView score;    private TextView labelPoints;    private ImageButton finQuest;    private int langFlag = 0;    private PowerManager.WakeLock wakeLock;    private int points = 0;    private ListenerQuestionChooser lqc;    //saving and loading the instanceState of the buttons bellow works perfectly    private ImageButton btn1;    private ImageButton btn2;    private ImageButton btn3;    private ImageButton btn4;    private ImageButton btn5;    private ImageButton btn6;    @SuppressLint("InvalidWakeLockTag")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);        wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");        wakeLock.acquire();        setContentView(R.layout.activity_main);        labelPoints = findViewById(R.id.total_score);        finQuest = findViewById(R.id.btn_finanswer);        score = findViewById(R.id.text_points);         btn1 = findViewById(R.id.btn1);        btn2 = findViewById(R.id.btn2);        btn3 = findViewById(R.id.btn3);        btn4 = findViewById(R.id.btn4);        btn5 = findViewById(R.id.btn5);        btn6 = findViewById(R.id.btn6);        }最終編輯:經過大約 16 個小時的頭撞墻、嘗試各種事情(邏輯和不邏輯的)并在每一步上打印日志,我解決了這個問題。所以這就是解決方案(我仍然不明白為什么其他對象在沒有這個的情況下可以完美工作,而這些對象需要它,但是嘿,只要它有效,我就會接受它)。
查看完整描述

2 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

經過大約 16 個小時的頭撞墻、嘗試各種事情(邏輯和不邏輯的)并在每一步打印日志之后,我解決了這個問題。所以這就是解決方案(我仍然不明白為什么其他對象在沒有這個的情況下可以完美工作,而這些對象需要它,但是嘿,只要它有效,我就會接受它)。


if (lqc == null) {

    lqc = new ListenerQuestionChooser(this, this);

}


if (savedInstanceState != null) {

    this.loadSettings(savedInstanceState);

}


if (finQuest == null) {

    try {

        finQuest = findViewById(R.id.btn_finansfer);

        finQuest.setOnClickListener(lqc);

        if (ListenerQuestionChooser.getCorrectAnswer() > 0) {

            finQuest.setVisibility(View.VISIBLE);

        } else {

            finQuest.setVisibility(View.INVISIBLE);

        }

    } catch (Exception e) {

        e.printStackTrace();

    }

}


if (labelPoints == null) {

    labelPoints = findViewById(R.id.total_score);

    score = findViewById(R.id.text_points);

    try {

        ss = new StringSetter(this);

        if (getLangFlag() == 0) {

            labelPoints.setVisibility(View.INVISIBLE);

            score.setVisibility(View.INVISIBLE);

        } else {

            score.setText(String.valueOf(getPoints()));

            labelPoints.setText(ss.podesiPromenljivu(brPoena, getLanguage()));

        }

    } catch (Exception e) {

        e.printStackTrace();

    }

}


查看完整回答
反對 回復 2023-07-19
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

這顯然不是完整的來源,所以我們只能猜測??雌饋砟谝淮蝿摻ù嘶顒訒r langFlag 設置為 0。從捆綁包中讀取它后,它必須是一個不同的值,因為您進入了 else 塊。我們不知道 getPoints 是什么 - 它只在您獲得 NPE 的地方提到一次。因此,看起來 getPoints 為 null,但我們無法從您附加的代碼中看出原因。



查看完整回答
反對 回復 2023-07-19
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號