最近写了一些应用我被一个问题所阻止。
在这个应用程序中,我有两个活动:A和B.在活动A中,每当GPS坐标改变时,我都会从web下载对象列表。对于此活动,通过GPS和Internet连接呼叫连接绑定服务。然后将这些对象放入根据其名称创建的列表中,按下任何一个后,我可以打开传递此对象的B活动,并在活动B中从该对象获取更多信息。
活动B没有任何绑定服务,它只取内部对象并显示它。
由于活动A中的绑定服务在onStop中未绑定,因此当我使用后退箭头返回时,需要一段时间才能再次下载所有内容。更有意思的是,列表仍然填充,但这些只是名称,实际的对象列表不存在,只要在回归任何名称后按下就会导致OutOfBoundException。
所以,我的问题是,当我生活活动A时,你会建议你做什么来保存这些对象,然后在下载新的(或同样的)列表之前检索它们。
我试过了:
onRestoreInstanceState()
与onSaveInstanceState()
,因为您可以保存parcelable列表,但活动A没有被如此快速地销毁,因此没有onRestoreInstanceState()
的召唤; Shared preferences
,但这是不好的选择,因为你无法在那里保存列表; ContentValues
和content resolvers
但也是错误的选择,因为您无法保存列表。你还有什么想法,怎么做?
哦,我忘了提及,我假设列表中最多可以有100个对象,每个对象有5个字段。
答案 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而不是下载它。对单身人士课程概念做更多的研究,我相信你会学到一些对你有帮助的东西。