簡體   English   中英

Android-具有兩個類的共享首選項

[英]Android - Shared Preference with Two Classes

基本上,我想設置一個類,使其具有用於設備的getter和setter來存儲和檢索數據,以及用於訪問它的其他類。 我設法使sharedpreferences在一個類中工作,但在兩個類中遇到了麻煩(我熟悉Java但不熟悉Android,我讀過某個地方,我不應該使用Activity,而是靜態的,也不能正常工作)。 無論如何,這里是getter / setter類。

public class Storage extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
}

final SharedPreferences prefs = this.getSharedPreferences(
        "uk.co.kenreid.examplestory", Context.MODE_PRIVATE);

String nameKey = "uk.co.kenreid.examplestory.name";

我在其他類中使用以下代碼段進行訪問(最終用作onclicklistener中的變量“ storage”):

final Storage storage = new Storage();

storage.storeItem("name", name);
System.out.println(storage.getString("name"));

嘗試這個:

SharedPreferences prefs = this.getSharedPreferences("uk.co.kenreid.examplestory", Context.MODE_MULTI_PROCESS);

以共享首選項存儲內容:

    SharedPreferences prefs = getSharedPreferences("TOT", Context.MODE_PRIVATE);  
    Editor ed = prefs.edit();  
    ed.putString(key, value);  
    ed.commit(); 

您可以在onCreate方法中使用上面的代碼。

從共享的偏好中獲取一些東西:

    SharedPreferences prefs = getSharedPreferences("TOT", Context.MODE_PRIVATE);
    prefs.getString(key, null);

我相信您的問題是要從Activity初始化SharedPreferences嗎?

假設這是您的問題,則可以通過Storage類的構造函數傳遞一個Context來初始化它。

例如。

SharedPreferences prefs;

public Storage(Context aContext){
    prefs = aContext.getSharedPreferences("uk.co.kenreid.examplestory", 
            Context.MODE_PRIVATE);
}

然后通過原始的acessor方法進行訪問。 最好是將Application Contex t而不是Activity Context傳遞給構造函數,因此在創建Storage類時,請在Activity中這樣調用它:

Storage myStorage = new Storage(getApplicationContext());

同樣,最好創建一個Singleton類,以允許您使用相同的Storage實例。 網上有很多Java單例教程。

嘗試這樣:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());

mVariable = sharedPref.getBoolean(SettingsActivity.KEY_TO_VARIABLE, false);

檢查getSharedPreferences的文檔

在這里,第一個參數是存儲數據的共享首選項的名稱。 因此,您需要在每個類中使用相同的名稱來訪問相同的共享首選項。

您可以使用單獨的類可以處理您的所有首選項

public class PreferenceManager {
    public static void setLogInSuceess(boolean login, Context context) {
        SharedPreferences preferences;
        preferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE);

        preferences.edit().putBoolean("LOGIN", login).commit();
    }

    public static boolean getLogInSuceess(Context context){
        SharedPreferences preferences;
        preferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        boolean login = preferences.getBoolean("LOGIN", false);

        return login;
    }
}

隨時隨地使用它,

PreferenceManager.setLogInSuceess(true / false,context); boolean _login = PreferenceManager.getLogInSuceess(context);

嘗試這個:

public class Storage extends Application

應用程序是用於共享活動數據的類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM