将数据存储为键值对的形式,然后用于填充微调器

Storing data into form of Key Value pair and later using to populate spinner

我正在开发一个 android 应用程序,该应用程序在线时会从服务器获取键值列表并将其存储在文件中。离线时,此列表显示在微调器中(下拉)

保存该列表以便对其进行写入和读取的最佳方法是什么

这就是我的工作原理。

首先是我获取数据并将其放入一个HashMap 中。 HashMap 存储的是PowerPreference。这允许即使设备处于离线状态也可以访问数据 PowerPreference - https://github.com/AliAsadi/PowerPreference

List<Material> materialArray = data.getMaterial();
HashMap<Integer, String> materialMap = new HashMap<Integer, String>();
for(Material material : materialArray){
     materialMap.put(Integer.parseInt(material.getId()), material.getMaterialName());
}
if(PowerPreference.getFileByName(powerPrefFile).contains(powerPrefMat)){
     PowerPreference.getFileByName(powerPrefFile).remove(powerPrefMat);
}
PowerPreference.getFileByName(powerPrefFile).putMap(powerPrefMat, materialMap);

存储的数据可以离线检索,因为它存储在本地存储中 /data/data/com.pakage.name/shared_prefs

MapStructure structure = MapStructure.create(HashMap.class, String.class, Object.class);
if(PowerPreference.getFileByName(powerPrefFile).contains(powerPrefMat)){
      HashMap<Integer, String> materialMap = PowerPreference.getFileByName(powerPrefFile).getMap(powerPrefMat, structure);
      if(!materialMap.isEmpty()){
           populateSpinner(materialMap);
      }
}

这是使用 StringWithTag 使用键值对填充微调器的代码 http://blog.mikeclassic.ca/post/android-populating-spinner-with-strings-and-id

public void populateSpinner(HashMap<Integer, String> map){
    List<StringWithTag> arrayList = new ArrayList<StringWithTag>();
    arrayList.add(new StringWithTag("Select Material", 0));

    for (Map.Entry<Integer, String> entry : map.entrySet()) {
        Integer key = Integer.parseInt(String.valueOf(entry.getKey()));
        String value = entry.getValue();
        arrayList.add(new StringWithTag(value, key));
    }

    ArrayAdapter<StringWithTag> arrayAdapter = new ArrayAdapter<StringWithTag>(this, android.R.layout.simple_spinner_item, arrayList);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        materialSpinner.setAdapter(arrayAdapter);
}