把jsonArray放到SharedPreferenses上

时间:2017-01-16 14:20:00

标签: android arrays sharedpreferences

我是编程新手,需要你的帮助。我已经共享了我在我的应用程序中的一些活动中使用的参考。我用它来保存用户名,密码等。现在我需要保存任务(字符串)。但问题是,我无法理解如何在共享优惠中保存一些任务。我现在的代码只保存了我放的最后一个任务。

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());
    }
    }

2 个答案:

答案 0 :(得分:1)

SharedPreferences只能为每个键存储一个值。 SavePreferences1每次调用时只有一个数组被重新创建,并且只有一个任务。

无论如何,理想情况下,您不应该将SharedPreferences用于数据列表。 sqlite数据库将是首选。

虽然你可以做类似

的事情
  1. 获取用户任务列表。这是JSONArray tasks
    • 如果用户不存在,请获取空任务列表[]。这可以通过SharedPreferences方法的默认参数指定。
    • 如果用户确实存在,则您有一个列表[1, 2, 3...]
  2. 使用tasks.put(newTask)
  3. 添加新任务
  4. 使用更新的任务列表将用户名重新放入SharedPreferences。这将覆盖该用户的现有任务列表。
  5. 更简单的方法 - 使用Gson为您的User类提供一个JSON表示,您可以序列化&反序列化与Java对象之间的反序列化。像正常一样使用ArrayList

答案 1 :(得分:0)

试试这个:

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();
            }

        }