Java 存储字符串键值对
我正在开发一个android应用程序,该应用程序的主要工作是有一个扫描仪,我必须再次扫描&再次扫描,并将结果存储在键值对中Java 存储字符串键值对,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在开发一个android应用程序,该应用程序的主要工作是有一个扫描仪,我必须再次扫描&再次扫描,并将结果存储在键值对中 [ { "0" : "816444014066", "1" : "747083010945", "2" : "816444010969" } ] 通过API,我必须通过数组发送所有扫描结果。 我正在通过startActivityForResult获得另一个活动的扫描结果。用户将一次又一次扫描,通过onActivityResult用户
[
{
"0" : "816444014066",
"1" : "747083010945",
"2" : "816444010969"
}
]
通过API,我必须通过数组发送所有扫描结果。
我正在通过startActivityForResult获得另一个活动的扫描结果。用户将一次又一次扫描,通过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
}
}
}
为此,最好使用HashMap来存储非持久性数据。您不需要共享首选项,因为您正在发布结果,所以不需要持久存储 大概是这样的:
Map <Integer,Integer> myMap = new HashMap<Integer,Integer>();
List<String> keyValuePairList = new ArrayList<>();
keyValuePairList.add("816444014066");
keyValuePairList.add("747083010945");
keyValuePairList.add("816444010969");
Map myMap=newhashmap();
如果您需要应用程序中其他地方的扫描结果,我建议您使用SharedReferences并放置键值对。
否则,只需使用HashMap
建议:如果需要保留键值对的顺序,请使用LinkedHashMap并对其进行迭代。以下是使用hashmap保存键值的示例代码:
HashMap<String, String> data = new HashMap<String, String>();
data.put("key", "value");
HashMap data=newhashmap();
数据输入(“键”、“值”);
或者如果订单对您使用linkedHashMap很重要:
HashMap<String, String> data = new LinkedHashMap<>();
HashMap data=newlinkedhashmap();
用法相同;) 使用hashmap存储数据,然后使用Gson将hashmap转换为字符串,然后将其保存到SharedPrefs
private void hashmaptest()
{
//create test hashmap
HashMap<String, String> testHashMap = new HashMap<String, String>();
testHashMap.put("key1", "value1");
testHashMap.put("key2", "value2");
//convert to string using gson
Gson gson = new Gson();
String hashMapString = gson.toJson(testHashMap);
//save in shared prefs
SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE);
prefs.edit().putString("hashString", hashMapString).apply();
//get from shared prefs
String storedHashMapString = prefs.getString("hashString", "oopsDintWork");
java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType();
HashMap<String, String> testHashMap2 = gson.fromJson(storedHashMapString, type);
//use values
String toastString = testHashMap2.get("key1") + " | " + testHashMap2.get("key2");
Toast.makeText(this, toastString, Toast.LENGTH_LONG).show();
}
private void hashmaptest()
{
//创建测试哈希映射
HashMap testHashMap=新HashMap();
testHashMap.put(“key1”、“value1”);
testHashMap.put(“key2”、“value2”);
//使用gson转换为字符串
Gson Gson=新的Gson();
字符串hashMapString=gson.toJson(testHashMap);
//保存在共享首选项中
SharedReferences prefs=GetSharedReferences(“测试”,模式\私有);
prefs.edit().putString(“hashString”,hashMapString).apply();
//从共享pref获取
String storedHashMapString=prefs.getString(“hashString”、“oopsDintWork”);
java.lang.reflect.Type=new-TypeToken(){}.getType();
HashMap testHashMap2=gson.fromJson(storedHashMapString,类型);
//使用值
字符串toastString=testHashMap2.get(“key1”)+“|”+testHashMap2.get(“key2”);
Toast.makeText(this,Toast字符串,Toast.LENGTH_LONG).show();
}
来源:好吧,如果你想保存存储的键值,以防用户关闭应用程序,那么你需要使用sqllite、file、sharedprefernces中的一种。但是,如果用户关闭应用程序并重新启动它,那么它将是新的(键值),然后您只需使用HashMap,如下所示:
Map <Integer,Integer> myMap = new HashMap<Integer,Integer>();
List<String> keyValuePairList = new ArrayList<>();
keyValuePairList.add("816444014066");
keyValuePairList.add("747083010945");
keyValuePairList.add("816444010969");
Map hashMap=new hashMap()代码>数据结构逻辑:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
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());
Hashmaps用于通过其密钥访问内容
在这个示例中,我猜您正在逐个扫描“元组”,并且每个元组都不同于其他元组,因此您不需要通过元组的键访问旧元组
因此,在这里,我建议您创建适合键值对的模型类,并将它们存储在列表中。完成后,您可以推送该列表
元组的示例模型:
public class KeyValuePair {
private String key;
private String value;
public KeyValuePair(String key, String value) {
this.key = key;
this.value = value;
}
}
要存储的示例列表:
List<KeyValuePair> keyValuePairList = new ArrayList<>();
keyValuePairList.add(new KeyValuePair("0", "816444014066"));
keyValuePairList.add(new KeyValuePair("1", "747083010945"));
keyValuePairList.add(new KeyValuePair("2", "816444010969"));
List keyValuePairList=new ArrayList();
添加(新的keyValuePairList(“0”、“816444014066”);
添加(新的keyValuePairList(“1”、“747083010945”);
添加(新的keyValuePairList(“2”,“816444010969”);
存储:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
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());
如果无法在活动之间传递数据,请签出。您可以将数据存储在SQLite中,并在需要时获取它。它是一个在Android设备上工作的离线数据库。推送到上游时可以删除数据
编辑:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
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());
如果键是顺序,您可以简单地使用如下字符串列表:
Map <Integer,Integer> myMap = new HashMap<Integer,Integer>();
List<String> keyValuePairList = new ArrayList<>();
keyValuePairList.add("816444014066");
keyValuePairList.add("747083010945");
keyValuePairList.add("816444010969");
List keyValuePairList=new ArrayList();
keyValuePairList.add(“816444014066”);
keyValuePairList.add(“747083010945”);
keyValuePairList.add(“816444010969”);
如果使用Integer作为键,最好使用SparseArray
而不是HashMap
,因为它使用基本键存储数据,并且比HashMap更快
SparseArray<String> spa = new SparseArray();
@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){
//Adding code will be here
spa.put(key,value);
}
}
}
SparseArray spa=新SparseArray();
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//检查请求代码是否与此处传递的代码相同,它是2
if(requestCode==2&&data!=null){
字符串消息=data.getStringExtra(扫描结果);
//textView1.setText(消息);
如果(消息!=null){
//将在此处添加代码
spa.put(键、值);
}
}
}
SharedReferences
用于存储小数据,因此我建议您将其存储在文件中
稍后再读取。。。(如果您的数据很大)
首先创建一个对象
,例如HashMap
,如下所示:
HashMap<String, String> data = new HashMap<String, String>();
data.put("0", "816444014066");
...
然后,如果您想读取数据,只需执行以下操作:
public static synchronized Object readData(Context context, String filename) {
Object obj = new Object();
try {
String tempPath = context.getFilesDir() + "/" + binFileName + ".bin";
File file = new File(tempPath);
if (file.exists()) {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
obj = ois.readObject();
ois.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
在扫描结果之后,我在中创建了一个方法,我将在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);
}
}
}
用于将结果从一个活动发送到另一个活动:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
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());
用于接收以前活动的数据:
Gson gson = new Gson();
String list = gson.toJson(data);
Intent intent = new Intent(AdjustInventoryCount.this, AdjustInventory.class);
intent.putExtra("list", list);
startActivity(intent);
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());
String str=getIntent().getStringExtra(“列表”);
Gson Gson=新的Gson();
类型entityType=newTypeToken({}.getType();
data=gson.fromJson(str,entityType);
字符串jsonList=gson.toJson(数据,LinkedHashMap.class);
Log.e(“列表”,“jsonList”);
Log.e(“Size”,“”+data.Size());
通过这种方式,我得到了存储在LinkedHashMap中的原始序列结果。在这里使用hashmap。您能给我存储kay值对的示例代码吗@Arajuuse hashmap,但请注意hashmap不会按顺序存储键值对。请在下面找到我的答案,当我添加