在这种情况下,您的逻辑会存在一些冲突。而是使用 Gson 使用 String.format 。
当您在您的arraylist 中添加a 并保存到共享偏好时,它会给出完美的结果[a]。
然后,您尝试从 edittext 添加 b 并从首选项中添加 [a] - 结果 [b,[a]]。当你试图把它变成 json 时,它的制作太冲突了。
但是,根据您的要求,结果应该是["a", "b", "c", "d"]
-
因此,当从首选项中检索数据时,请替换 [] 。替换后看起来像 "a" 或 "a", "b" 或 etc 。我们不需要来自偏好的[],我们会从 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();
}