Android 将jsonArray放入SharedReferences

Android 将jsonArray放入SharedReferences,android,arrays,sharedpreferences,Android,Arrays,Sharedpreferences,我是编程新手,需要你的帮助。我在我的应用程序的一些活动中使用了共享的参考资料。我用它来保存用户名、密码等。现在我需要将任务(字符串)保存到it中。但问题是,我不明白如何在共享的首选项中保存一些任务。我现在只保存我放置的最后一个任务的代码 public class MainPage extends AppCompatActivity { SharedPreferences prefs; EditText input; Button btnDel; @Overrid

我是编程新手,需要你的帮助。我在我的应用程序的一些活动中使用了共享的参考资料。我用它来保存用户名、密码等。现在我需要将任务(字符串)保存到it中。但问题是,我不明白如何在共享的首选项中保存一些任务。我现在只保存我放置的最后一个任务的代码

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

SharedReferences每个键只能存储一个值
SavePreferences1
只有一个数组,每次调用该数组时都会重新创建该数组,并且只有一个任务

无论如何,理想情况下,您不应该对数据列表使用SharedReference。最好使用sqlite数据库


虽然你可以做一些像

  • 获取用户任务列表。让它成为
    JSONArray任务
    • 如果用户不存在,则获取一个空任务列表
      []
      。这可以由
      SharedReferences
      方法的默认参数指定
    • 如果用户确实存在,则您有一个列表
      [1、2、3…]
  • 使用
    任务添加新任务。放置(newTask)
  • 将用户名与更新的任务列表一起放回SharedReferences。这将覆盖该用户的现有任务列表
    更简单的方法-使用Gson为您的
    用户
    类提供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();
                }
    
            }
    

    谢谢但我还是喜欢使用SharedReferences。现在我在SheredPreferences中记录如下:{“name”:“nikita”,“pass”:“112233qW”,“email”:nikita@nikita.com“,“status”:true,“tasks”:“here”}我只需要找到一种方法,将更多的任务放在共享首选项中。他想说的是:你覆盖了你的任务,如果每次都使用相同的用户名存储任务。@KeitL则该数据中没有数组<代码>“任务”:‌​此处“。。。这是一个问题。你能澄清一下在另一个答案中什么不起作用吗
    getString
    JSONObject
    SharedReferences
    类的一种方法。谢谢。但我把这个optString突出显示为红色。然后在putString按钮停止工作时更改。请使用getString尝试