我是编程新手,需要您的帮助。我有我在应用程序的一些活动中使用的sharedPreferenses。我用它来保存用户名,密码等。现在,我需要将任务(字符串)保存到其中。但是问题是我无法理解如何在共享的偏好中保存一些任务。我现在保存的代码仅保存我上次执行的任务。

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仅具有一个在每次调用时都会重新创建的数组,并且只有一个任务。

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



虽然你可以做类似的事情


获取用户任务列表。设为JSONArray tasks


如果用户不存在,请获取一个空的任务列表[]。这可以通过SharedPreferences方法的默认参数指定。
如果确实存在用户,则您有一个列表[1, 2, 3...]

使用tasks.put(newTask)添加新任务
将用户名放回带有更新的任务列表的SharedPreferences中。这将覆盖该用户的现有任务列表。




更简单的方法-使用Gson为您的User类提供JSON表示形式,您可以在Java对象之间进行序列化和反序列化。像平常一样使用ArrayList

关于android - 将jsonArray放入SharedPreferenses,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41678491/

10-12 04:34