2013-03-02 78 views
0

最近写了一些应用程序我已经停止了一个问题。如何保存对象的列表onStop/onPause在Android的活动

在这个程序中,我有两个活动:A和B.在活动A我每次从GPS坐标变化下载对象列表。对于这项活动,与GPS和互联网连接呼叫相连的绑定服务。然后这些对象被放入从他们的名字创建的列表中,并且在按下任何这些对象之后,我可以打开传递该对象的B活动,并且在活动B中从该对象获取更多信息。

活动B没有任何绑定服务,它只是将内部对象显示出来。

由于活动A中的绑定服务在onStop中未绑定,因此当我使用向后箭头回到它时,需要一段时间才能再次下载所有内容。更有趣的是,该列表仍然是填充的,但这些仅仅是名称,实际的对象列表不存在,并且在任何名称复位之后立即按下将导致OutOfBoundException。

所以,我的问题是,当我开始活动A时,如何保存这些对象并在下载新的(或同一个)列表之前返回并检索它们时,您会采取什么建议?

我已经试过:

  • onRestoreInstanceState()onSaveInstanceState(),因为可以节省parcelable名单,但活动一不被破坏得这么快,所以没有呼吁onRestoreInstanceState();
  • Shared preferences,但这是不好的选择,因为你不能在那里保存列表;
  • ContentValuescontent resolvers但也是不好的选择,因为你不能保存列表。

你有什么更多的想法,它是如何做到的?

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

回答

0

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

0

需要缓存下载的数据在一个单独的类喜欢这里

类DataController类 {

公共静态的ArrayList AA;

}

填充当你下载数据,并在活动性检验,如果该列表不为空,然后使用此ArrayList改为只下载它的此ArrayList。对单身课程概念做更多的研究,我相信你会学到对你非常有用的东西。

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; 
    } 
} 
相关问题