2017-01-16 3 views
1

Я новичок в программировании и нуждаюсь в вашей помощи. У меня есть общие настройки, которые я использую в нескольких действиях в своем приложении. Я использую его для сохранения имени пользователя, пароля и т. Д. Теперь мне нужно сохранить в нем задачи (строки). Но проблема в том, что я не мог понять, как я могу сохранить несколько задач в общих предпочтениях. Код, который я сохранил только в последней задаче, которую я поставил.Поместите jsonArray в 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()); 
    } 
    } 

ответ

1

SharedPreferences может хранить только одно значение за ключ. SavePreferences1 имеет только один массив, который воссоздается каждый раз, когда он вызывается, и имеет только одну задачу.

В идеале вы не должны использовать SharedPreferences для списков данных. Было бы предпочтительной база данных sqlite.


Хотя вы могли бы сделать что-то вроде

  1. Получить задач пользователя список. Пусть это будет JSONArray tasks
    • Если пользователя не существует, получите пустой список задач []. Это может быть задано параметром по умолчанию методов SharedPreferences.
    • Если пользователь существует, у вас есть список [1, 2, 3...].
  2. Добавить новую задачу с tasks.put(newTask)
  3. Put Имя пользователя обратно в SharedPreferences с обновленным списком задач. Это перезапишет существующий список задач для этого пользователя.

простой способ - использовать Gson, чтобы дать вашему User класс представление JSON можно сериализовать & десериализации и из объектов Java. Используйте ArrayList, как обычно.

+0

Спасибо. Но я по-прежнему предпочитаю использовать SharedPreferences. Теперь я записываю в SheredPreferences, которые выглядят так: {"name": "nikita", "pass": "112233qW", "email": "[email protected]", "status" : true, "tasks": "here"} Мне просто нужно найти способ поставить больше задач в общих предпочтениях. – KeitL

+0

Что он пытается сказать: вы переопределяете свою задачу, если вы каждый раз сохраняете задачу с тем же именем пользователя. – Prexx

+0

@KeitL У вас нет массива в этих данных. '" Tasks ":" here "' ... это строка –

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

     } 
+0

Спасибо. Но чем я полагаю, этот optString выделяется красным цветом. Чем он изменен, кнопка putString остановлена. – KeitL

+0

Попробуйте с getString – Prexx

+0

Избегайте меня. Я попробовал getString. Не работает. – KeitL