簡體   English   中英

在Android中將數據從一個活動傳遞到另一個活動時獲取空值

[英]Getting null values when passing data from one activity to another in android

我將一些數據存儲在Activity1中的靜態變量中,並在Activity3和Activity 5中進行訪問。
活動1 --->活動2 --->活動3
..................... |
...................... Activity4 .-----> Activ5

如果我們從Activity1完全關閉應用程序,這將很好地工作(即,如果用戶位於Activ5,如果他單擊“后退”按鈕,則-> Activ4-> Activ2-> Activ1->退出)

但是用戶通過單擊“移動”退出按鈕(而不是應用程序退出)在Activ3、4、5退出應用程序。現在,用戶重新打開應用程序幾小時后,它從Activi3或4或5開始啟動。應用已關閉的位置)。

現在,由於我正在使用一些數據(我將這些數據存儲在Activ1中的靜態變量中。)
我得到空值。 為什么這令人開心。 如何避免這種類型的錯誤。
我使用了sharedpref來避免這種情況。這是唯一的解決方案嗎?

您需要在先前的活動中添加onSaveInstanceState方法,並檢查onCreate方法收到的捆綁軟件。 查看活動生命周期以獲取詳細信息。

重新創建活動時,請恢復其活動狀態,以便以后可以檢索傳遞的值。 例如,對於通過意圖傳遞的整數,請執行以下操作:-

//this will save the value if an activity is killed in background.
@Override
    protected void onSaveInstanceState(Bundle outState) 
    {
        getIntent().putExtra("count", getIntent().getStringExtra("count"));
        super.onSaveInstanceState(outState);
    }

//In restore instance state, retrieve the stored values. The following work can also be done //in oncreate, as when an activity is killed in background, onCreate method is also called.

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) 
    {
        if(savedInstanceState == null)
            return;
        int count = getIntent().getIntExtra("count", 0);
        super.onRestoreInstanceState(savedInstanceState);
    }

您不應該將值存儲在靜態成員中,活動上下文將被釋放,因此您將丟失靜態值。 在活動之間傳遞值的首選方法是將Bundles與Intent一起使用。

您可以創建新類並擴展應用程序,並在其中存儲所需的所有數據,它非常有用,但請記住,如果這樣做,則必須在清單文件中添加應用程序名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM