如何保存对象列表onStop / onPause在android中的活动

时间:2013-03-02 12:03:43

标签: android

最近写了一些应用我被一个问题所阻止。

在这个应用程序中,我有两个活动:A和B.在活动A中,每当GPS坐标改变时,我都会从web下载对象列表。对于此活动,通过GPS和Internet连接呼叫连接绑定服务。然后将这些对象放入根据其名称创建的列表中,按下任何一个后,我可以打开传递此对象的B活动,并在活动B中从该对象获取更多信息。

活动B没有任何绑定服务,它只取内部对象并显示它。

由于活动A中的绑定服务在onStop中未绑定,因此当我使用后退箭头返回时,需要一段时间才能再次下载所有内容。更有意思的是,列表仍然填充,但这些只是名称,实际的对象列表不存在,只要在回归任何名称后按下就会导致OutOfBoundException。

所以,我的问题是,当我生活活动A时,你会建议你做什么来保存这些对象,然后在下载新的(或同样的)列表之前检索它们。

我试过了:

  • onRestoreInstanceState()onSaveInstanceState(),因为您可以保存parcelable列表,但活动A没有被如此快速地销毁,因此没有onRestoreInstanceState()的召唤;
  • Shared preferences,但这是不好的选择,因为你无法在那里保存列表;
  • ContentValuescontent resolvers但也是错误的选择,因为您无法保存列表。

你还有什么想法,怎么做?

哦,我忘了提及,我假设列表中最多可以有100个对象,每个对象有5个字段。

3 个答案:

答案 0 :(得分:1)

创建一个Singleton类,并将对象存储在HashMap或ArrayList(适合您的任何内容)中,并在其他活动中访问该列表。

import java.util.ArrayList;

public class DataHandler {
    private static DataHandler handler;
    private ArrayList<Object> list;

    private DataHandler() {
    }

    public static DataHandler getInstance() {
        if (handler == null)
            handler = new DataHandler();
        return handler;
    }

    public ArrayList<Object> getList() {
        return list;
    }

    public void setList(ArrayList<Object> list) {
        this.list = list;
    }
}

答案 1 :(得分:0)

如果不使用SharedPreferences和ContentValues的原因是因为它无法处理列表,那么您可能会考虑将列表序列化为类似JSON的东西,将其保存为String并将其加载映射回对象。通常是2行代码来转换对象&lt; - &gt;例如JSON。

答案 2 :(得分:0)

您需要将下载的数据缓存在单个类中,如此处

类DataController {

public static ArrayList aa;

}

在下载数据时填写此arraylist,并在您的活动中检查此列表是否为null,然后仅使用此arraylist而不是下载它。对单身人士课程概念做更多的研究,我相信你会学到一些对你有帮助的东西。