存储字符串键值对

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)

用法是一样的;)


Bah*_*mir 7

数据结构逻辑:

哈希映射用于通过其键访问内容。

在这个示例中,我猜您正在一个一个地扫描“元组”,并且每个元组都与其他元组不同,因此您不需要通过它的键来访问旧元组。

所以在这里,我建议您创建适合键值对的模型类并将它们存储在列表中。完成后,您可以推送该列表。

元组的示例模型:

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)


Abh*_*mar 1

扫描结果后,我创建了一个方法,将所有扫描结果一一添加到 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 中的原始序列明智结果。