将文本字段的值和 SharedPreferences 中保存的值添加到数组
Adding the value of a text field and a saved value from SharedPreferences to an array
我有一个文本字段,我希望保存它的值。另外,如果同一个文本字段之前有另一个值,它也应该被保存。
我是这样试的:
ArrayList<String> listOfTexts = new ArrayList<>();
SharedPreferences mPrefs = getContext().getSharedPreferences("k-texts", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
listOfTexts.add(Objects.requireNonNull(_customTextField.getText()).toString());
listOfTexts.add(mPrefs.getString("k-text", ""));
Gson gson = new Gson();
String json = gson.toJson(listOfTexts);
prefsEditor.putString("k-text", json);
prefsEditor.apply();
我在该字段中保存了多个值。值是:a、b、c 和 d
那么,在那种情况下,json
returns ["d",""c","[\"a\",\"\", \"b\",\"[\\\"a\\\",\\\"\\\"]\"]"]"] 但我想要的是 [“a”、“b”、“c”、“d”]
怎样才能得到我想要的结果?
在这种情况下,您的逻辑存在一些冲突。而不是使用 Gson
使用 String.format
.
当您在 arraylist
中添加 a
并保存到共享偏好时,它会给出完美的结果 [a]
.
然后您尝试从 edittext 添加 b
并从首选项获得 [a]
- 结果 [b,[a]]
。当你试图制作它时 json 它制作太冲突了。
但是,根据您的要求,结果应该是 ["a", "b", "c", "d"]
所以当从首选项中检索数据时替换 []
。替换后它看起来像 "a"
或 "a", "b"
或等等。我们不需要 []
from preference ,我们会从 ArrayList 中获取它。
valuefromPrefrence = mPrefs.getString("k-text", null);
try {
finalpreferenceValue = valuefromPrefrence.replace("[", "").replace("]", "");
} catch (Exception e) {
e.printStackTrace();
}
我们可以检查保存的数据以跳过重复的数据存储。
if (finalpreferenceValue != null && finalpreferenceValue.contains(valueofeditText)) {
Toast.makeText(getApplicationContext(), "Data already exists", Toast.LENGTH_SHORT).show();
} else {
然后在将字符串添加到 arraylist 之前按照我们的要求格式化字符串。
String allvalues = String.format("" + "%s," + "\"" + "%s\"", finalpreferenceValue, valueofeditText);
然后添加格式化的字符串并存储数据。就是这样。
所以你可以检查 -
ArrayList<String> listOfTexts = new ArrayList<>();
SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("k-texts", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
String valueofeditText = Objects.requireNonNull(_customTextField.getText()).toString();
String valuefromPrefrence, finalpreferenceValue = null;
valuefromPrefrence = mPrefs.getString("k-text", null);
try {
finalpreferenceValue = valuefromPrefrence.replace("[", "").replace("]", "");
} catch (Exception e) {
e.printStackTrace();
}
if (finalpreferenceValue != null && finalpreferenceValue.contains(valueofeditText)) {
Toast.makeText(getApplicationContext(), "Data already exists", Toast.LENGTH_SHORT).show();
} else {
String allvalues = String.format("" + "%s," + "\"" + "%s\"", finalpreferenceValue, valueofeditText);
//replace null, got from first time load valuefromPrefrence = mPrefs.getString("k-text", "");
String rallvalues = allvalues.replace("null,", "");
listOfTexts.add(rallvalues);
prefsEditor.putString("k-text", String.valueOf(listOfTexts));
prefsEditor.apply();
}
我有一个文本字段,我希望保存它的值。另外,如果同一个文本字段之前有另一个值,它也应该被保存。
我是这样试的:
ArrayList<String> listOfTexts = new ArrayList<>();
SharedPreferences mPrefs = getContext().getSharedPreferences("k-texts", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
listOfTexts.add(Objects.requireNonNull(_customTextField.getText()).toString());
listOfTexts.add(mPrefs.getString("k-text", ""));
Gson gson = new Gson();
String json = gson.toJson(listOfTexts);
prefsEditor.putString("k-text", json);
prefsEditor.apply();
我在该字段中保存了多个值。值是:a、b、c 和 d
那么,在那种情况下,json
returns ["d",""c","[\"a\",\"\", \"b\",\"[\\\"a\\\",\\\"\\\"]\"]"]"] 但我想要的是 [“a”、“b”、“c”、“d”]
怎样才能得到我想要的结果?
在这种情况下,您的逻辑存在一些冲突。而不是使用 Gson
使用 String.format
.
当您在 arraylist
中添加 a
并保存到共享偏好时,它会给出完美的结果 [a]
.
然后您尝试从 edittext 添加 b
并从首选项获得 [a]
- 结果 [b,[a]]
。当你试图制作它时 json 它制作太冲突了。
但是,根据您的要求,结果应该是 ["a", "b", "c", "d"]
所以当从首选项中检索数据时替换
[]
。替换后它看起来像"a"
或"a", "b"
或等等。我们不需要[]
from preference ,我们会从 ArrayList 中获取它。valuefromPrefrence = mPrefs.getString("k-text", null); try { finalpreferenceValue = valuefromPrefrence.replace("[", "").replace("]", ""); } catch (Exception e) { e.printStackTrace(); }
我们可以检查保存的数据以跳过重复的数据存储。
if (finalpreferenceValue != null && finalpreferenceValue.contains(valueofeditText)) { Toast.makeText(getApplicationContext(), "Data already exists", Toast.LENGTH_SHORT).show(); } else {
然后在将字符串添加到 arraylist 之前按照我们的要求格式化字符串。
String allvalues = String.format("" + "%s," + "\"" + "%s\"", finalpreferenceValue, valueofeditText);
然后添加格式化的字符串并存储数据。就是这样。
所以你可以检查 -
ArrayList<String> listOfTexts = new ArrayList<>();
SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("k-texts", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
String valueofeditText = Objects.requireNonNull(_customTextField.getText()).toString();
String valuefromPrefrence, finalpreferenceValue = null;
valuefromPrefrence = mPrefs.getString("k-text", null);
try {
finalpreferenceValue = valuefromPrefrence.replace("[", "").replace("]", "");
} catch (Exception e) {
e.printStackTrace();
}
if (finalpreferenceValue != null && finalpreferenceValue.contains(valueofeditText)) {
Toast.makeText(getApplicationContext(), "Data already exists", Toast.LENGTH_SHORT).show();
} else {
String allvalues = String.format("" + "%s," + "\"" + "%s\"", finalpreferenceValue, valueofeditText);
//replace null, got from first time load valuefromPrefrence = mPrefs.getString("k-text", "");
String rallvalues = allvalues.replace("null,", "");
listOfTexts.add(rallvalues);
prefsEditor.putString("k-text", String.valueOf(listOfTexts));
prefsEditor.apply();
}