我为Android开发了一个应用程序。
我有很多phpinfo()
类型的变量。我想使用EditText
来保存用户输入的数据。当我尝试逐个放置每个Button
时,问题就出现了。
所以我考虑使用EditText
。我读到我无法将ArrayList
直接放到SharedPreferences上。但是哪种方式更好呢?使用Hash,可序列化还是逐个?我是初学者,所以我不知道哪种方式更好 - 这意味着更容易使用但更长。
在这种情况下我尝试了一个变量(" m"但是)当我单击一个按钮来保存它时,它会从应用程序中消失。
如何改进此代码才能正常使用?
这是代码:
ArrayList
答案 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();