EditText到SharedPreferences的ArrayList

时间:2016-01-04 13:33:51

标签: java android arraylist sharedpreferences

我为Android开发了一个应用程序。

我有很多phpinfo()类型的变量。我想使用EditText来保存用户输入的数据。当我尝试逐个放置每个Button时,问题就出现了。 所以我考虑使用EditText。我读到我无法将ArrayList直接放到SharedPreferences上。但是哪种方式更好呢?使用Hash,可序列化还是逐个?我是初学者,所以我不知道哪种方式更好 - 这意味着更容易使用但更长。

在这种情况下我尝试了一个变量(" m"但是)当我单击一个按钮来保存它时,它会从应用程序中消失。

如何改进此代码才能正常使用?

这是代码:

ArrayList

3 个答案:

答案 0 :(得分:0)

在for循环中,您可以创建一个json字符串并将其保存到sharedprefs,如;

public void saveToSharedPrefs(List<EditText> messageLIST) {

    JSONArray jsonArrayParent = new JSONArray();

    for (int i = 0; i < messageLIST.size(); i++) {

        String str = messageLIST.get(i).getText().toString().trim();

        try {
            JSONObject jsonChid = new JSONObject();
            jsonChid.put("key", str);
            jsonArrayParent.put(jsonChid.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("numberValue", jsonArrayParent.toString());
    editor.commit();
}

并在你的saveButton方法中调用此方法,如

public void saveButton(View view) {
    Intent intent = new Intent(this, MainActivity.class);
    saveToSharedPrefs(messageLIST);
    startActivity(intent);
}

答案 1 :(得分:0)

我不知道为什么你需要这样做。您可以为优先级中的所有编辑文本值保存逗号分隔字符串。您不需要这些行..

 List<EditText> messageLIST = new ArrayList<EditText>(){{
    add(m);
    add(m1);
    add(m2);
    add(m3);
    add(m00);
    add(m11);
    add(m22);
    add(m33);
}};
for(int i = 0; i < messageLIST.size(); i++)
{
    messageLIST.get(i);
}

就这样做

在每个编辑文本上调用getText.toString()并将其附加到其他值,然后将其保存在您的首选项中

答案 2 :(得分:0)

我建议你创建一个Map<String, EditText>()。使用Map将所有EditText添加到put("Your key value", yourEditText)。如果要将其存储到SharedPreferences,请执行以下操作:

 SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
 SharedPreferences.Editor editor = sharedPreferences.edit();
 for(Map.Entry<String, EditText> entry : map.entrySet()){
    editor.putString(entry.getKey(), entry.getValue().getText().toString();
 }
 editor.commit();