2012-08-16 93 views
0

我想在我的應用程序中做一個簡單的Facebook登錄,但是我收到了一些關於SharedPreferences的問題。如何獲得我的共享偏好?

的想法是:在應用啓動並進入到活動A,你登錄並返回到A.它看到如果你登錄,如果你不是那麼它就會進入活動B

發生的事情是,當我在B登錄時,它將我發回給A,但A似乎沒有加載我的SharedPreferences並將我發回給B,並且我進入了一個循環。

這是我在A.

public static String access_token = null; 
long expires; 

代碼...

private void SharedP() { 
    // TODO Auto-generated method stub 
    prefs = getSharedPreferences(access_token, MODE_PRIVATE); 
    access_token = prefs.getString("access_token", null); 
    expires = prefs.getLong("access_expires", 0); 
    if (access_token == null && expires == 0) { //If it's not logged... 
     Intent login = new Intent("android.intent.action.FACEBOOKLOGIN"); 
     startActivity(login); 
    } 
} 

我在做什麼錯?我應該怎麼做?

我在B碼:

public void onComplete(Bundle values) { 
       // TODO Auto-generated method stub 
       Editor edit = fbSP.edit(); 
       edit.putString("access_token", fb.getAccessToken()); 
       edit.putLong("access_expires", fb.getAccessExpires()); 
       edit.commit(); 
       UpdateLoginImage(); 
       BackToA(); 
      } 

回答

0

看來t o我說你沒有閱讀A和B上的共享偏好文件。

getSharedPreferences(access_token, MODE_PRIVATE)打開「access_token」共享偏好文件,應該使用文件名如getSharedPreferences("facebook_data", MODE_PRIVATE)

然後在活動B中,如果您按照登錄Android的Facebook指南,它會使用活動sharedPreferences getPreferences(MODE_PRIVATE)。這第二個返回一個首選項文件,只有活動B可以訪問。我只是猜測這是因爲我沒有你的代碼,也許你確定。

檢查是否在兩個活動上打開了相同的sharedPreferences文件。

+0

我用更多的代碼編輯了我的帖子。我不認爲我打電話給另一個共享偏好。 – 2012-08-17 02:28:43

+0

在B中你做了'fbSP.edit()',但是你是如何初始化fbSP的? – nsemeniuk 2012-08-17 14:22:23

+0

對不起,我沒注意!謝謝,我忘記了我正在使用「getPreferences(MODE_PRIVATE)」而不是「getSharedPreferences(」facebook_data「,MODE_PRIVATE)」。一切都在工作,非常感謝你! – 2012-08-17 20:24:35

1

當存儲在ActivityB你的SharedPreferences,請確保調用commit()保存偏好。

像這樣:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
editor.putBoolean("loggedIn", isLoggedIn); 
editor.commit(); 
+0

我叫它。我認爲問題不在B中,因爲在B中它會自動進入A並顯示註銷按鈕而不是登錄名,所以看起來好像沒有問題。 – 2012-08-16 21:54:20

+0

@VictorDomingosSantiago你可以發佈你如何存儲嗎?弄亂你的SharedPreferences的唯一方法就是使用錯誤的密鑰。你正在調用onResume()中的SharedP()嗎?從ActivityB回到ActivityA只會調用onResume()。 – 2012-08-16 22:24:24

+0

我在B中發佈我的代碼。 – 2012-08-16 22:36:08

0

這應該是hepful。你必須更好地轉化爲您的情況是:

在答:

private boolean isLogged; 

// Check if the user is logged 
SharedPreferences settings = getSharedPreferences(SETTINGS_FILENAME, MODE_PRIVATE); 
isLogged= settings.getBoolean("isLogged", false); 

...然後比較:

if (!isLogged) { 
    Intent intent = new Intent(); 
    intent.setClass(A.this, B.class); 
    startActivity(intent); 
} else { 
    // Do anything 
} 

在B:

// ... after login 
SharedPreferences settings = getSharedPreferences(SETTINGS_FILENAME, MODE_PRIVATE); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putBoolean("isLogged", true); 
editor.commit(); 

問候