0

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

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

Activity B 没有任何绑定服务,它只获取对象内部的内容并显示它。

因为活动 A 中的绑定服务在 onStop 中未绑定,所以当我使用后退箭头返回它时,需要一段时间才能再次下载所有内容。更有趣的是,列表仍然被填满,但那些只是名称,实际的对象列表不存在,并且在返回任何名称后按下任何名称都会导致 OutOfBoundException。

所以,我的问题是,在下载新的(或相同的)列表之前,你会建议在我进行活动 A 时保存这些对象并在回来时检索它们。

我试过了:

  • onRestoreInstanceState()with onSaveInstanceState(), 因为在那里你可以保存 parcelable 列表,但是活动 A 没有这么快被破坏,所以没有调用onRestoreInstanceState();
  • Shared preferences,但这是一个不好的选择,因为你不能在那里保存列表;
  • ContentValues而且content resolvers,糟糕的选择,因为你不能保存列表。

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

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

4

3 回答 3

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;
    }
}
于 2013-03-02T12:13:54.087 回答
0

如果不使用 SharedPreferences 和 ContentValues 的原因是因为它无法处理列表,那么您可能会考虑将列表序列化为 JSON 之类的东西,将其保存为字符串,然后在将映射加载回对象时。例如,转换对象 <-> JSON 通常需要 2 行代码。

于 2013-03-02T12:09:35.420 回答
0

您需要将下载的数据缓存在像这里这样的单例类中

类数据控制器 {

公共静态 ArrayList aa;

}

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

于 2013-03-02T12:09:36.733 回答