2012-08-24 60 views
2

我在我的Eclipse中構建的Android的Gingerbread 2.3.3應用程序中有3個活動。SharedPreferences退出時未保存應用程序

1)MainActivity ---兩個選擇,去LoginActivity或直接去HomeScreenActivity

2)LoginActivity ---輸入登錄憑據(又名用戶名和密碼),驗證,然後在SharedPreferences存儲。成功驗證後,它轉到HomescreenActivity。下面是我對在LoginActivity的SharedPreferences部分:

public static final String PREFS_FILE = "MY_PREFS"; 

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putString("USERNAME", getUsername()); 
       editor.putString("PASSWORD", getPassword()); 
       editor.commit(); 

3)HomescreenActivity ---一個基本的主屏幕,顯示誰是登錄,現在在一個TextView右上角。對於這個我的onResume()包含:

public static final String PREFS_FILE = "MY_PREFS"; 

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE); 
TextView name_text = (TextView) findViewById(R.id.name_text_vw); 
name_text.setText(prefs.getString("USERNAME", ""); 

當我使用LoginActivity和登錄,我看到正確的用戶名在該HomescreenActivity TextView的。但是,當我退出應用程序並執行一些其他操作以使活動脫離堆棧時,我想回到應用程序,直接轉至我的HomescreenActivity並查看我的用戶名已登錄。但是這並沒有發生。有誰知道爲什麼?即使離開應用程序,我仍然認爲SharedPreferences是存儲設置和數據的方式。也許我沒有使用正確的模式 - 又名MODE_WORLD_READABLEMODE_WORLD_WRITABLE

+0

Checked logcat? –

+0

yupped選中了Logcat,這是我知道我在我的應用程序內時的偏好設置是否正確存儲。當我的應用程序退出時,我失去了登錄信息。 – codedawg82

回答

3

活動共享首選項,應用共享首選項。也許你正在使用活動首選項。

要保存到首選項:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL", 
     "myStringToSave").commit(); 

爲了得到一個存儲的偏好:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL", 
    "defaultStringIfNothingFound"); 

其中上下文是您的上下文。

+2

這似乎比製作自定義類更容易。在使用'getApplicationContext()'之後,它正確地保存了信息。謝謝。 – codedawg82

+0

@ codedawg82 Np。 :)我可以得到upvote,因爲我幫助:)乾杯。 – Doomsknight

+0

Upvoted! (對不起,我認爲標記爲答案會自動完成) – codedawg82

0

我不得不說我不知道​​你的具體問題的答案,我懷疑這是因爲getSharedPreferences不是靜態的,並且是Context的一種方法。因此,您無法控制commit()實際寫入存儲的時間。但是,我建議採用不同的方法。

我在擴展Application的自定義類中使用靜態引用。

public class MyApp extends Application 

{ 

    protected static SharedPreferences preferences; 

    public static void loadPreferences(Context context) { 

     // load your preferences 

    } 


    public static void savePreferences(Context context) { 


     // save your preferences 

    } 

您可以通過MyApp.preferences訪問它們。

不要忘記將您的應用程序類添加到清單。

祝你好運!

相關問題