通过Android中的onCreate使用onSaveInstanceState检索数据

时间:2014-06-23 21:42:04

标签: java android arraylist instance

我正在创建一个Android应用程序,它涉及将一些数据存储在String ArrayList中,我称之为“contentSpace”。我需要保存此数组以在再次启动时检索应用程序的状态。为此,我使用onSaveInstanceState,并将其传递给onCreate以检索数据。但是,这不起作用。以下是代码的一部分:

ArrayList<String> contentSpace = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main); 

    if (savedInstanceState != null) {

        contentSpace = savedInstanceState.getStringArrayList("Data");

        Toast.makeText(this, "Success", Toast.LENGTH_LONG).show();
    }

    else {

        Toast.makeText(this, "Failure", Toast.LENGTH_LONG).show();

    }


}


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

    super.onSaveInstanceState(savedInstanceState);

    if (contentSpace != null) {

    savedInstanceState.putStringArrayList("Data", contentSpace);

    Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show();

    }

    else {

        Toast.makeText(this, "Not saved", Toast.LENGTH_LONG).show();

    }


}

当我运行程序时,Toast显示“已保存”,因此我认为contentSpace包含我需要的数据,而不是null。但是,当我再次启动应用程序时调用onCreate时,Toast会显示“Failure”,表示contentSpace为null。有谁知道这有意义吗?预先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

However, when onCreate is called when I start the app again, Toast displays "Failure,"

这是因为你再次启动活动,onSaveInstanceState意味着当你重新创建/暂停视图/活动(例如screen rotation)时,它将调用onSaveInstanceState()方法,然后调用onCreate(),然后您将获得已保存的数据,但在您的情况下,当您尝试再次启动应用时,数据将无法保存。

<强>溶液

即使您退出应用,也可以使用SharedPreferences来保存数据。

答案 1 :(得分:0)

正如官方参考所说:

  
    

您可以选择实现onRestoreInstanceState(),系统在onStart()方法之后调用,而不是在onCreate()期间恢复状态。仅当存在要恢复的已保存状态时,系统才会调用onRestoreInstanceState(),因此您无需检查Bundle是否为空

  

因此,尝试替换您的代码以提取已保存的数据,它将起作用。

public void onRestoreInstanceState(Bundle savedInstanceState){...}