2017-09-06 87 views
0

我是新的Android。我正在與Json共享偏好。從JSON我得到的數據並保存到共享偏好,它工作正常。我想將SharedPreferences中的共享首選項數組數據分配給字符串。共享偏好陣列數據emtpty數組保存在android系統

這是代碼:

 private ArrayList<String>urls2 = new ArrayList<>(); 
     private ArrayList<String>urls1 = new ArrayList<>(); 

     this is the json parse 
      if (errorCode == 0) { 
         email = p.getString("email"); 
         firstName = p.getString("firstName"); 
         lastName = p.getString("lastName"); 
         phone = p.getString("phone"); 
         status = p.getString("status"); 
         updatedDate = p.getString("updatedDate"); 
         serverURL = p.getString("url"); 
         urls1.add(p.getString("url")); 

     //     urls1.append(","); 
         Log.d("URL", "" + urls1); 
         urls2.add(p.getString("staffId"))     urls2.append(","); 
         Log.d("STAFFID", "" + urls2); 

     } 
SharedPreferences: 

     SharedPreferences.Editor editor = getSharedPreferences("LOGINACTIVITY", 0).edit(); 


          for(int i=0;i<urls2.size();i++) { 
           editor.putString("staffId1" + i, urls2.get(i)); 
           Log.d("staffId1",urls2.get(i).toString()); 
          } 

          for(int i=0;i<urls1.size();i++) { 
           editor.putString("serverURL" + i, urls1.get(i)); 
           Log.d("SavedURl",urls1.get(i).toString()); 



         } 

in next view controller i want assing the shared preference array data string 

     like ex : firsturl = arrayshared[0] 

        secondurl = arrayshared[1] 

      this is next view controller 

      ArrayList<String> staffdata = new ArrayList<String>(); 

        int listsize = mPrefsManager.getInt("staffId1", 0); 

        Log.d("firstcall of<<<<<<<",""+listsize); 

        for(int i=0; i<=listsize; i++) { 

         if(listsize == 0) 
         { 

         Hear : first shared preference array first element data 

          like ex : firsturl = arrayshared[0] 

          Log.d("firstcall of<<<<<<<",""+listsize); 
          firsturl = .get(i).toString() 

         } 
         else 
         { 

         like : secondurl = arrayshared[1] 
         ===> hear second url data 
          Log.d("second irst<<<",""+listsize); 
         } 

如何從共享偏好數組中的數據到達串

+0

你忘了加上'editor.commit( );'沒有提交它不會保存任何數據 –

+0

我這樣做,但我的問題是sharedpreference陣列數據串 –

+2

「請幫助我」你需要超過13歲才能在本網站參與。如果你是,像這樣行動 –

回答

0

使用共享偏好(https://developer.android.com/training/basics/data-storage/shared-preferences.html#ReadSharedPreference)以正確的方式是:

  1. 要寫入共享偏好:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("Your Key name", yourString); editor.commit();

  • 從共用首讀:
  • SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); String defaultValue = "default String"; String mString = sharedPref.getString("Your Key name", defaultValue);

    所以:

    步驟1:我們已經存儲內的yourString值有關鍵呼籲"Your Key name" preferece;

    第2步:我們已經閱讀偏好和保存他的mString變量中的值。

    所以,你可以很容易地使用一個循環的字符串存儲您的ArrayList內(列表的每一個元素必須有一個不同的密鑰),並使用另一個循環讀取的喜好和偏愛的每個加入到另一個列表。

    爲了更好地使用,不要忘記存儲的偏好內部的ArrayList lenght。

    例如,寫入字符串的ArrayList到SharedPreferences:

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putInt("lengtArrayList", lengtOfTheArrayList); 
    for (int i = 0; i < lengtOfTheArrayList; i++) { 
        editor.putString("Your Key name" + i, yourArrayList.get(i)); 
    } 
    editor.commit(); 
    

    讀取和存儲另一個ArrayList的內部:

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
    int size = sharedPref.getInt("lengtArrayList", 0); 
    String defaultValue = "default String"; 
    for (int i = 0; i < size; i++) { 
        String mString = sharedPref.getString("Your Key name" + i, defaultValue); 
        mArrayList.add(mString); 
    }; 
    

    我希望它可以幫助你:d

    祝你好運!

    例如嘗試這個代碼片段到一個新的項目,看到的logcat:

    公共類MainActivity擴展AppCompatActivity {

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        ArrayList<String> arrayList1 = new ArrayList<String>(); 
        arrayList1.add("ciao"); 
        arrayList1.add("come"); 
        arrayList1.add("stai"); 
    
        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPref.edit(); 
        editor.putInt("lengtArrayList", arrayList1.size()); 
        for (int i = 0; i < arrayList1.size(); i++) { 
         editor.putString("p" + i, arrayList1.get(i)); 
        } 
        editor.commit(); 
    
        ArrayList<String> arrayList2 = new ArrayList<String>(); 
        int size = sharedPref.getInt("lengtArrayList", 0); 
        String defaultValue = "default String"; 
        for (int i = 0; i < size; i++) { 
         String mString = sharedPref.getString("p" + i, defaultValue); 
         Log.v("Preference = ", mString); 
         arrayList2.add(mString); 
         Log.v("Array = ", arrayList2.get(i)); 
        }; 
    } 
    

    }

    +0

    int size = mPrefsManager。getInt(「staffId1」,0); String defaultValue =「default String」;對於(int i = 0; i <= size; i ++){ // String mString = mPrefsManager.getString(「s」,i,「defatu」); String mString = mPrefsManager.getString(「staffId1」+ i,defaultValue); Data.add(mString); Log.d(「<<<<<」,「」+ Data)的數據加數; }如果我可以嘗試獲取空值 –

    +0

    String mString = mPrefsManager.getString(「staffId1」+ i,defaultValue);我想在那裏獲得staffid –

    +0

    使用我的方法創建x首選項。每個首選項都有鍵=「您的鍵名」+ i。 – moamsi