Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “后退”按钮后再次创建活动时,可传送数据不可用_Java_Android_Android Activity_Parcelable_Oncreate - Fatal编程技术网

Java “后退”按钮后再次创建活动时,可传送数据不可用

Java “后退”按钮后再次创建活动时,可传送数据不可用,java,android,android-activity,parcelable,oncreate,Java,Android,Android Activity,Parcelable,Oncreate,我有一个活动。它接收可包裹对象并将其另存为属性 问题是,当您按下其中一个ListView项时,会显示另一个活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); setHjClient((Client) getIntent().getParc

我有一个活动。它接收可包裹对象并将其另存为属性

问题是,当您按下其中一个ListView项时,会显示另一个活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);
    setHjClient((Client) getIntent().getParcelableExtra("hjClient"));
    setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    //super.onListItemClick(l, v, position, id);
    Complejo c = ((Complejo) l.getAdapter().getItem(position));
    Intent i = new Intent(this, ComplejoActivity.class);
    i.putExtra("session", getHjClient().getSession());
    i.putExtra("complejo", c);
    startActivity(i);
}
在此之前,一切都按预期工作,但当我按下“上一步”按钮时,再次调用OnCreate方法,但现在getIntent()为null,因此我没有填充ListView所需的可打包数据,因此收到NullPointerException错误

当我按下“后退”按钮后显示“活动”时,如何访问该可传送数据

编辑了我的onCreate方法:

Client hjClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);
    if (getIntent().getExtras() != null) {
        setHjClient((Client) getIntent().getParcelableExtra("hjClient"));
        setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
    } else if (savedInstanceState != null) {
        setHjClient((Client) savedInstanceState.getParcelable("hjClient"));
        setListAdapter(new ComplejoListAdapter(this, getHjClient().getComplejos()));
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putParcelable("hjClient", getHjClient());
    super.onSaveInstanceState(outState);
}

您可以使用而不是startActivity,然后在其他活动完成时将意图发送回

您可以尝试使用
onSaveInstanceState()
在活动消失之前保存数据。

您的“活动”听起来像被破坏了(可能是因为内存限制)

这是一个“经典”的例子,Android说如果发生超出您控制范围的事件,您需要持久化数据。最好的例子是当用户在你的应用程序中,电话铃响时。他们离开你的应用程序,当他们返回时,你不应该期望“状态”被保存

您需要找到一种方法来保存从以下位置获取的可包裹数据:

getIntent().getParcelableExtra("hjClient"))
该调用应该是对“SharedReferences”或其他持久数据存储的调用

这并不容易实现,因为如果用户有其他方式可以访问此活动,那么您需要对此进行说明

另一种方法(在另一个答案中提到,但没有很好地解释)是捆绑您的数据以开始下一个活动,然后当该活动完成时,使用“setResult”在“onActivityForResult”中传回该数据,如下所述:

然后检查数据的结果并重新填充客户端对象


一句话:不要期望用户能够返回到上次看到的状态中的任何活动,而不保留数据以重新创建该状态。

这也不起作用。当我按下back按钮时,onCreate方法被激发并且getIndent()为nullsavedInstanceState在onCreate方法中为null,当我按下back按钮时,使用startActivityForResult的方法对我有效。非常感谢你,吉姆