2014-07-02 31 views
0

好吧,我試圖將一組三個電話號碼保存到共享的首選項。當我點擊保存時,它會遍歷所有的代碼和吐司,並彈出結束,但應該保存的數字不會顯示,而是顯示我爲每個數字輸入的默認文本。感興趣的難題。無論如何,在我正在使用的代碼塊中。Android中的SharedPref不在按鈕上保存數據按

 saveNums.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String num1String; 
      num1String = num1.getText().toString(); 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putString(constants.num1, num1String); 
      editor.commit(); 

      String num2String; 
      num2String = num2.getText().toString(); 
      SharedPreferences.Editor editor2 = prefs.edit(); 
      editor2.putString(constants.num2, num2String); 
      editor2.commit(); 

      String num3String; 
      num3String = num3.getText().toString(); 
      SharedPreferences.Editor editor3 = prefs.edit(); 
      editor3.putString(constants.num3, num3String); 
      editor3.commit(); 

      Toast.makeText(c, "Contact's have been saved: " + "\n" + constants.num1 + "\n" + constants.num2 + "\n" + constants.num3, Toast.LENGTH_LONG) 
        .show(); 

     } 
    }); 

這裏是共享的首選項文件:

import android.content.SharedPreferences; 

public class constants { 
    public static String PREF_NAME = "sharedString"; 
    public static String num1 = "num1"; 
    public static String num2 = "num2"; 
    public static String num3 = "num3"; 
    SharedPreferences prefs; 
} 

任何錯誤都上來了,當我打的saveNums按鈕。所有相同的數字也沒有被保存。任何關於如何解決這個問題的想法都會很棒。

+0

檢查精確的方法來檢索值和申請sharedPref在[這個SO問題](http://stackoverflow.com/questions/16194567/android-sharedpreferences-how-to-save-a-simple-int-variable),''constants.num1''wont工作 – user2450263

+2

你如何實例化'prefs'? –

+0

正如@IvoBeckers所說,您必須在代碼中的某處使用getSharedPreferences實例化SharedPreferences。你在哪裏做的? – HpTerm

回答

1

檢索助手類

public static final String MY_ST_PREFS = "what ever you want"; 

public static void savePreferences(Context context, String key, String value) { 

    SharedPreferences sharedPreferences = context.getSharedPreferences(
      MY_ST_PREFS, 0); 
    Editor editor = sharedPreferences.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 

public static String getPreferences(Context context, String key) { 

    String prefsStr = ""; 

    SharedPreferences sharedPreferences = context.getSharedPreferences(
      MY_ST_PREFS, Context.MODE_PRIVATE); 
    prefsStr = sharedPreferences.getString(key, ""); 

    return prefsStr; 

} 

而在你添加該代碼點擊剛剛在Shared Preferences

yourhelperclass.savePreferences(context,"yourkey",yourstringvalue); 

而對於越來越Shared preferences數據只是使用此代碼

String myString = yourhelperclass.getPreferences(context,"yourkey"); 

我希望這將工作添加此數據保存...

+0

完美,我明白它是如何工作的。從本質上講,它將所有主要工作都放在文件中,並將其納入一些方法中。完美 - 謝謝! – CodeMonkeyAlx

1

在我看來,像你沒有瞭解SharedPreferences鍵/值對一般的概念。

SharedPreferences可用於存儲與自由選擇密鑰關聯的值。

實施例:

String key = "key"; 

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context); 
Editor e = prefs.edit(); 

e.putString(key, "stringtosave"); 
e.commit(); 

這意味着,值 「stringtosave」 現在被存儲在SharedPreferences,與鍵 「鍵」 相關聯。當檢索值時,您需要再次提供密鑰。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context); 
String retrieved = prefs.getString(key); // retrieved will then contain "stringtosave" 

你在做你的Toast消息什麼是展示與保存的值相關聯的密鑰。這些鍵永遠不會改變,顯然總是有相同的價值。

如果要在Toast消息中顯示實際保存的值,則需要從SharedPreferences中檢索它,或使用剛存儲的值(例如「num1String」)。

0

要存儲在共享PREF

public synchronized void storeInPref(Context context, String key, String value) { 
     SharedPreferences preferences = context.getSharedPreferences(
       PREFERENCE_NAME, Context.MODE_PRIVATE); 
     Editor prefEditor = preferences.edit(); 
     prefEditor.putString(key, value);  
     prefEditor.commit(); 
    } 

從共享PREF

public synchronized String getFromPref(Context context, String key) { 
     SharedPreferences pref = context.getSharedPreferences(PREFERENCE_NAME, 
       Context.MODE_PRIVATE); 
     return pref.getString(key, null); 
    } 
相關問題