[英]How to temporarily store parts of data?
我有部分数据不是按顺序来的。 让我解释 :
ID为1的用户发送数据(“电话号码”),但ID为78的用户同时发送另一个数据(“家庭住址”)。
所有输入数据都具有相同的接收器。
设置完每个ID的所有数据集后,数据将发送到mysql数据库并从临时存储中删除。
每个用户ID需要填写6个不同的信息,然后才能发送完整的数据。
因此,问题是如何使用其个人ID存储临时数据部分 (不将它们混在一起),只有这样我才能将所有数据都进行下一个任务?
我应该使用arrayList还是其他的东西?
编辑(回答重复的建议):我的问题有点不同,那里的答案根本没有帮助我!
您可以创建对象“数据”
class Data {
private param1,param2,...,param6;
public Data(){
}
/* PARAMS getters */
/* PARAMS setters */
public void insert(){
//insert to database
}
}
然后使用HashMap
更新数据:
HashMap<Integer, Data> map = new HashMap<Integer, Data>();
并且每次您获取一些数据和id时都要检查数据的类型(Data对象中的哪个参数)并在地图中对其进行更新
Data toUpdate = map.get(id);
toUpdate.setParam...
您可以在每次设置一些参数以表明所有数据都已设置并准备插入时使它成为监听器。
如您所说,您可以将其存储在内存中的某些结构中。 我会选择一些与活动无关的方法,否则您需要跟踪活动生命周期。 例如,您可以使用HashMap将实体名称(即名称,地址等)映射为其值(或者,如果要存储单个实体的多个实例,请在另一个答案中建议使用某种Data类) 。 就我个人而言,我发现此方法最繁琐/凌乱,因为您需要将存储与“活动”分开,或者处理所有活动更改,以免丢失状态。
第二种方法是使用SharedPreferences。 为此目的制作一个单独的prefs文件,获取它们( getSharedPreferences("partial_data_dl", MODE_PRIVATE)
),将每一列存储为prefs中的一个字段,并在将它们提交到数据库之前清除它们。 这比将所有内容存储在内存中容易,并且不应明显慢。
第三点是显而易见的:为什么不随数据输入更新数据库记录? 第一次插入仅填充一列的新记录,每隔一次发出更新查询以为新列添加值。 诚然,这是最重的解决方案,可能不适用于您的用例,但我会尝试一下进行测试。 俗话说,过早的优化是万恶之源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.