关闭另一个应用程序后如何恢复数据

时间:2013-07-04 15:14:16

标签: java android android-activity

我正在开发一个Android应用程序,我需要打开pdf文件并在按下后退按钮时返回相同的活动。

问题

我使用intent和starting活动正确打开pdf文件(来自ActivityOne),但当我按下后退按钮时,我在ActivityOne(以及之前的活动)中拥有的所有数据都已丢失。

以下是我展示pdf的活动代码:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
            +"/"+ myApplication.getUsuarioActual().getFacturaActual().getPdf());
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setType("application/pdf");
startActivity(intent); 

我该怎么做才能解决这个问题?当我打开另一个应用程序并关闭它时也会出现同样的情况:当返回到我的应用程序时,它会显示一条错误,指出所有数据都为空。

修改

在阅读that question后,@ TheCharliemops推荐我,我知道这是我需要的,但我有另外一个问题。

我有一个myApplication类扩展Application以维护全局应用程序状态,我保存在不同活动中读/写的所有数据。

我的问题是,如果我必须使用myApplication保存onSaveInstanceState中每个活动中的所有数据,或者有一些最简单的方法来执行此操作。

1 个答案:

答案 0 :(得分:1)

最重要的是,欢迎来到SO !!

Here,@ reto-meier解释了如何在Android中保存活动状态。我认为这可以解决你的问题。我把他的代码放在这里给未来有类似问题的人。

他说您必须覆盖onSaveInstanceState(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState),如下面的代码所示:

Reto Meier说:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // etc.
}

Bundle本质上是一种存储NVP(“名称 - 值对”)地图的方式,它将被传递到onCreate以及onRestoreInstanceState,您可以在其中提取值这样:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

我希望这会对你有所帮助。

问候!