2017-01-16 89 views
1

我是編程新手,需要你的幫助。我在我的應用程序的一些活動中使用了sharedPreferenses。我用它來保存用戶名,密碼等等。現在我需要保存任務(字符串)。但問題是,我不知道如何在共享的優先事項中節省一些任務。我現在的代碼只保存了我放的最後一項任務。把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. 將用戶名回用更新的任務列表SharedPreferences。這將覆蓋該用戶的現有任務列表。

更簡單的方法 - 使用GSON給你User類JSON表示可以序列&反序列化和Java對象。像平常一樣使用ArrayList

+0

感謝。但我仍然喜歡使用SharedPreferences。現在我在SheredPreferences中記錄如下所示: {「name」:「nikita」,「pass」:「112233qW」,「email」:「[email protected]」,「status」 :true,「tasks」:「here」}我只需要找到方法在Shared preferences中放置更多任務。 – KeitL

+0

他想說的是:如果每次使用相同的用戶名存儲任務,則會覆蓋您的任務。 – Prexx

+0

@KeitL您在該數據中沒有數組。 '「任務」:「這裏」......這是一個字符串 –

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