2016-07-05 82 views
0

我試圖獲取存儲在另一個類的共享偏好數據,如何從另一個類中獲取SharedPreference中的數據?

public class MyActivity_Settings extends ListActivity { 


       //Shared Preference 
       SharedPreferences mSharedPreferences; 
       public static final String MYPREFERENCES = "MyUserChoice"; 
       public ArrayList<String> selectedItems = new ArrayList<>(); 

//onCreate 
    mSharedPreferences = getSharedPreferences(MYPREFERENCES, Context.MODE_PRIVATE); 

     @Override 
      public void finish() { 

     String selected = "My string" 

       SharedPreferences.Editor prefEditor = mSharedPreferences.edit(); 
       prefEditor.putString(MYPREFERENCES, selected); 
       prefEditor.apply(); 
       super.finish(); 
      } 

所以,從另一個類我要檢查是否爲MyPreference有一些數據,也基本上使用這些數據,這樣我可以進一步代碼

我想要做這樣的事情

if (mSharedPreferences.contains(MYPREFERENCES)) { 
      String savedItems = mSharedPreferences.getString(MYPREFERENCES, ""); 
      selectedItems.addAll(Arrays.asList(savedItems.split(","))); 

這是另一項活動

MyActivity_Settings mMyActivity_settings = new MyActivity_Settings(); 

public class MainActivity extends AppCompatActivity{ 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

    //Obviously this is not working 

    if(mMyActivity_settings.mSharedPreferences.contains(mMyActivity_settings.MYPREFERENCES){ 

Toast.makeText(this, " From MainACTIVITY WE HAVE DATA",Toast.LENGTH_LONG).show(); 
      } 


    } 

    } 
+0

請在MyActivity_Settings中顯示用於int'mSharedPreferences'的代碼 –

+0

瞭解有關Android和上下文的更多信息。 – GensaGames

+0

@PhanVănLinh我已更新代碼 – choman

回答

0

從其他類(活動),你應該爲了重視這個代碼把你SharedPreferences

SharedPreferences sharedPref; sharedPref = getSharedPreferences(MYPREFERENCESKEY , Context.MODE_PRIVATE); String selected = sharedPref.getString("MyUserChoice","");

你也尚未初始化SharedPreferences實例,您應該在當前活動中像這樣初始化它

SharedPreferences sharedPref; 
sharedPref = getSharedPreferences(MYPREFERENCESKEY , Context.MODE_PRIVATE) 
如果要檢查,如果你 SharedPreferences有數據,你可以檢查 SharedPreference與鍵值 MyUserChoice已,爲了不與空白 String值相等

。正如您在sharedPref.getString("MyUserChoice","");中看到的,第二個參數是您沒有任何數據時的默認值。檢查正確的方法是這樣的 if(str != null && !str.isEmpty())

+0

是的,我明白這一點。目前有兩個活動,一個是mMyActivity_settings,另一個是MyActivity。所以,我已根據您的答案和我的代碼在上面的mMyActivity中設置了共享首選項,現在我需要在MyActivity中使用sharedpreference, 當您在同一個活動中工作時,您的答案可以正常工作,但是我無法理解它在檢查時如何工作它來自另一項活動。 – choman

+0

請記住,'SharedPreferences'在您的應用程序中是全局的東西,它們會將數據寫入本地存儲設備,以便它們可以通過您的所有活動或服務等獲得。也許您使用不同的鍵來實例化'SharedPreferences'。請參閱以下鏈接:https://developer.android.com/training/basics/data-storage/shared-preferences.html – Vasilisfoo

1

在其他活動,你可以使用reget的sharedprefs:

mSharedPreferences = gettApplicationContext().getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); 

,並檢查有:

mSharedPreferences.contains(KEY); 

編輯:添加完整的例子爲清楚:

1日活動

private final static String MYPREFERENCES = "myapppref";//pref file name 
    private final static String MY_PREF_KEY = "timesclicked";//a key for the sharedpref map key->value 

    public void onCreate(Bundle savedInstanceState){ 
     [do usual stuff layout and so on...] 
     //first argument is the preference filename, if not existing it will be created, you can use a lot of different files if you need to 
     SharedPreference mSharedPreferences = getSharedPreferences(MYPREFERENCES, Context.MODE_PRIVATE); 
     //store a value to this pref file, in this case a key MY_PREF_KEY is a costant, value is what you want to store 
     mSharedPreferences.edit().putString(MY_PREF_KEY, value).apply(); 
    } 

第二幕ivity

public void checkMyPrefKeyExistance(){ 
    //get the pref file with the same name as first activity 
    SharedPreference mSharedPreferences = getSharedPreferences(MYPREFERENCES, Context.MODE_PRIVATE); 
    //check if key exists 
    boolean hasKey = mSharedPreferences.contains(KEY); 
    //get value for key, or default value, in this case def val is empty string 
    mSharedPreferences.getString(MY_PREF_KEY, ""); 
} 

https://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String,INT)

+0

什麼是SHARED_PREFERENCES_NAME?我如何初始化它? – choman

+0

我用一個完整的例子編輯答案,現在應該更清楚 – user6547359

2

在大多數應用中,我創建MyApp擴展Application類。 我在MyApp類中編寫了大部分SharePreference方法。

public static String getUsername() { 
     SharedPreferences mAppPreferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     return mAppPreferences.getString("USERNAME", ""); 
    } 

public static void setUsername(String username) { 
     SharedPreferences mAppPreferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     Editor mEditor = mAppPreferences.edit(); 
     mEditor.putString("USERNAME", username); 
     mEditor.commit(); 
    } 

因此,您可以輕鬆地在每個活動中獲取或設置數據。 獲取數據,只需撥打:

MyApp.getUsername(); 

設定資料,請致電:

MyApp.setUsername("Your User Name"); 

希望,這將幫助你。

+0

如何在.getDefaultSharedPreferences(** context **)中訪問/啓動** context ** ? () – choman

+0

init在您的應用程序類的onCreate() public void onCreate(){ super.onCreate(); MyApp.context = getApplicationContext(); } –

相關問題