Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储字符串键值对_Java_Android_Sharedpreferences - Fatal编程技术网

Java 存储字符串键值对

Java 存储字符串键值对,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在开发一个android应用程序,该应用程序的主要工作是有一个扫描仪,我必须再次扫描&再次扫描,并将结果存储在键值对中 [ { "0" : "816444014066", "1" : "747083010945", "2" : "816444010969" } ] 通过API,我必须通过数组发送所有扫描结果。 我正在通过startActivityForResult获得另一个活动的扫描结果。用户将一次又一次扫描,通过onActivityResult用户

我正在开发一个android应用程序,该应用程序的主要工作是有一个扫描仪,我必须再次扫描&再次扫描,并将结果存储在键值对中

  [
   {
    "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不会按顺序存储键值对。请在下面找到我的答案,当我添加