Abh*_*mar 4 java android sharedpreferences
我正在开发一个 android 应用程序,应用程序的主要工作是有一个扫描仪,我必须一次又一次地扫描并将结果存储在键值对中。
[
{
"0" : "816444014066",
"1" : "747083010945",
"2" : "816444010969"
}
]
Run Code Online (Sandbox Code Playgroud)
通过 API,我必须按数组发送所有扫描结果。我正在通过 startActivityForResult.User 获得另一个活动的扫描结果。用户将一次又一次地扫描,通过 onActivityResult 用户将获得结果。我必须将所有结果存储在键值对中,最后有一个按钮,通过点击按钮通过 POST 请求我必须像上面的代码一样通过数组发送所有扫描结果。
我可以在这里使用 HashMap 还是必须使用共享首选项来存储结果。
// Call Back method to get the Message form other Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if (requestCode == 2 && data!=null) {
String message = data.getStringExtra(SCAN_RESULT);
// textView1.setText(message);
if(message!= null){
Log.e("SCAN_RESULT", "" + message);
//Adding code will be here
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
这是使用 hashmap 保存键值的示例代码:
HashMap<String, String> data = new HashMap<String, String>();
data.put("key", "value");
Run Code Online (Sandbox Code Playgroud)
或者如果订单对您很重要,请使用 linkedHashMap :
HashMap<String, String> data = new LinkedHashMap<>();
Run Code Online (Sandbox Code Playgroud)
用法是一样的;)
数据结构逻辑:
哈希映射用于通过其键访问内容。
在这个示例中,我猜您正在一个一个地扫描“元组”,并且每个元组都与其他元组不同,因此您不需要通过它的键来访问旧元组。
所以在这里,我建议您创建适合键值对的模型类并将它们存储在列表中。完成后,您可以推送该列表。
元组的示例模型:
public class KeyValuePair {
private String key;
private String value;
public KeyValuePair(String key, String value) {
this.key = key;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
要存储的示例列表:
List<KeyValuePair> keyValuePairList = new ArrayList<>();
keyValuePairList.add(new KeyValuePair("0", "816444014066"));
keyValuePairList.add(new KeyValuePair("1", "747083010945"));
keyValuePairList.add(new KeyValuePair("2", "816444010969"));
Run Code Online (Sandbox Code Playgroud)
储存:
如果您无法在活动之间传递数据,请查看SQLite。您可以将数据存储在 SQLite 中并在需要时获取它。它是一个适用于 Android 设备的离线数据库。推送到上游时可以删除数据。
编辑:
如果键是订单,您可以简单地使用这样的字符串列表:
List<String> keyValuePairList = new ArrayList<>();
keyValuePairList.add("816444014066");
keyValuePairList.add("747083010945");
keyValuePairList.add("816444010969");
Run Code Online (Sandbox Code Playgroud)
扫描结果后,我创建了一个方法,将所有扫描结果一一添加到 HashMap 中。
LinkedHashMap<String, String> data = new LinkedHashMap<String, String>();
// Call Back method to get the Message form other Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if (requestCode == 2 && data!=null) {
String message = data.getStringExtra(SCAN_RESULT);
if(message!= null){
Log.e("SCAN_RESULT", "" + message);
showBarCodeContentDialoig(message);
storeScanValue(scanResult);
}
}
}
Run Code Online (Sandbox Code Playgroud)
onCreate() 之外;
private void storeScanValue(String scanResult) {
count++;
data.put(String.valueOf(count), scanResult);
Log.e("Key_Value",""+count);
Log.e("SIZE",""+data.size());
}
Run Code Online (Sandbox Code Playgroud)
将一个活动的结果发送到另一个活动:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
用于接收先前活动的数据:
String str= getIntent().getStringExtra("list");
Gson gson = new Gson();
Type entityType = new TypeToken< LinkedHashMap<String, String>>(){}.getType();
data = gson.fromJson(str, entityType);
String jsonList = gson.toJson(data, LinkedHashMap.class);
Log.e("list", ""+jsonList);
Log.e("Size", ""+data.size());
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我得到了存储在 LinkedHashMap 中的原始序列明智结果。