0

在我的 Android 活动中,我使用了两个不同的数组。首先,我声明它们,然后在onCreate()方法中实例化它们。但是,当我填充它们然后更改方向时,它们会再次实例化并且数据丢失。

public class MainActivity extends Activity {

    private JSONArray first;
    private JSONArray second;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        interestedSections = new JSONArray();
        productsBought = new JSONArray();
    }

        //...
}

我尝试if (savedInstanceState != null)在初始化数组之前添加,以便仅第一次初始化它们,但是当我改变方向时,它们是null. 我该怎么做才能在整个应用程序生命周期中持久保存数组中的数据?

4

3 回答 3

1

查看这个答案,因为屏幕旋转时调用了 onCreate: Activity restart on rotation Android

编辑:如果您想要一种快速而肮脏的方式使其工作,只需有一个静态初始化布尔值并将其设置为 true onCreate。如果 initialized 为真,请勿将数组设置为新数组。

于 2013-04-18T05:29:38.430 回答
0

请参阅onSaveInstanceState(),这是您应该将数组保存到包的位置。

顺便说一句,Android有时可以杀死进程并稍后恢复活动;静态变量将无法生存。

于 2013-04-18T05:55:04.483 回答
0

static我必须在方法中声明数组onCreate(),我只在第一次初始化它们:

公共类 MainActivity 扩展 Activity {

private static JSONArray first;
private static JSONArray second;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState == null) {
        first = new JSONArray();
        second = new JSONArray();
    }
}

    //...

}

于 2013-04-18T05:48:04.817 回答