我是编程新手,需要你的帮助。我已经分享了我在应用程序中的一些活动中使用的首选项。我用它来保存用户名,密码等。现在我需要将任务(字符串)保存到其中。但问题是我不明白如何在共享首选项中保存一些任务。我现在拥有的代码仅保存我放置的最后一个任务。
public class MainPage extends AppCompatActivity {
SharedPreferences prefs;
EditText input;
Button btnDel;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
prefs = getSharedPreferences("myUsers",MODE_PRIVATE);
input = (EditText)findViewById(R.id.txtItem);
protected void SavePreferences1(String task) {
JSONObject ExistUser = getUserByName("katya");//one of the users saved into sharedPreferences.
try {
JSONArray jsonArray = new JSONArray();
ExistUser.put("tasks", task);
jsonArray.put(task);
prefs.edit().putString(ExistUser.getString("name"), ExistUser.toString()).commit();//save changed JSON
} catch (JSONException e) {
e.printStackTrace();
}
}
public void SavePreferences(View v){
SavePreferences1(input.getText().toString());
}
}
SharedPreferences只能为每个键存储一个值。 SavePreferences1
只有一个数组,每次调用时都会重新创建,并且只有一个任务。
无论如何,理想情况下,您不应该将共享首选项用于数据列表。最好使用 sqlite 数据库。
虽然你可以做一些类似的事情
- 获取用户任务列表。让这成为
JSONArray tasks
- 如果用户不存在,则获取空任务列表
[]
。这可以通过SharedPreferences
方法的默认参数指定。 - 如果用户确实存在,则您有一个列表
[1, 2, 3...]
。
- 如果用户不存在,则获取空任务列表
- 使用
tasks.put(newTask)
添加新任务 - 将用户名放回共享首选项与更新的任务列表。这将覆盖该用户的现有任务列表。
更简单的方法 - 使用 Gson 为您的User
类提供 JSON 表示形式,您可以在 Java 对象之间进行序列化和反序列化。像平常一样使用ArrayList
。
试试这个:
protected void SavePreferences1(String task) {
JSONObject ExistUser = getUserByName("katya");//one of the users saved into sharedPreferences.
try {
JSONArray jsonArray = new JSONArray(prefs.getString(ExistUser.getString("name"), "[]"));
ExistUser.put("tasks", task);
jsonArray.put(task);
prefs.edit().putString(ExistUser.getString("name"), jsonArray.toString()).commit();//save changed JSON
} catch (JSONException e) {
e.printStackTrace();
}
}