在android中将数据从一个活动传递到另一个活动时获取空值

时间:2013-11-02 09:51:55

标签: android nullpointerexception

我将一些数据存储在Activity1中的静态变量中,并在Activity3和Activity5中访问。即... 活性1 --->活性2 ---> Activ3
..................... |
...................... Activity4 .-----> Activ5

如果我们从Activity1完全关闭应用程序(例如,如果用户在Activ5,如果他点击后退按钮然后 - > Activ4 - > Activ2 - > Activ1 - >退出),这可以正常工作

但是用户通过单击Mobile退出按钮(不是应用程序退出)退出Activ3,4,5上的应用程序,现在几小时后用户重新打开应用程序,It(app)从Activi3或4或5开始(即应用程序关闭的地方)。

现在,因为我正在使用一些数据(我存储在Activ1中的静态变量中。)
我得到空值。为什么这是幸福的。如何避免这类错误 我使用sharedpref来避免这种情况。这是唯一的解决方案吗?

4 个答案:

答案 0 :(得分:1)

您需要在先前的活动中添加onSaveInstanceState方法,并检查onCreate方法收到的包。有关详细信息,请查看Activity Lifecycle

答案 1 :(得分:1)

重新创建活动时恢复活动状态,以便稍后可以检索传递的值。  例如对于通过intent传递的整数,请执行以下操作: -

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

答案 2 :(得分:0)

您不应将值存储在静态成员中,活动上下文会被释放,因此您将丢失静态值。在活动之间传递值的首选方法是使用Bundles和Intents。

答案 3 :(得分:0)

你可以创建新的类并扩展应用程序,并在那个商店中存储你想要的所有数据,它非常有用但请记住,如果你这样做,你必须在清单文件中添加你的应用程序的名称