2012-08-16 6 views
0

내 앱에서 간단한 Facebook 로그인을하려고하지만 SharedPreferences에 대한 몇 가지 질문이 있습니다.공유 환경 설정을 어떻게 얻을 수 있습니까?

아이디어는, 로그인 한 사용자가없는 경우 다음이 활동 B에 당신을 보내는 경우에, 당신은 로그인 A.로 돌아가보고, 앱 시작하고 활동 A를 진행하다

무슨 일이 일어나는가 내가 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에서

내 코드 : 당신이 ActivityB에 된 SharedPreferences를 저장할 때

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

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

에서에서 onCreate에서 SharedP()를 호출하고있어 B. –

+0

B에서'fbSP.edit()'를 만들었지 만 fbSP를 어떻게 초기화 했습니까? – nsemeniuk

+0

미안하지만, 나는주의를 기울이지 않았다! 내가 대신 "getSharedPreferences ("facebook_data ", MODE_PRIVATE)"의 "getPreferences (MODE_PRIVATE)"를 사용하는 것을 잊어 버렸습니다, 감사합니다. 모든 것이 지금 일하고 있습니다, 정말 고마워요! –

1

이 환경 설정을 저장 commit()를 호출해야합니다. 이처럼

는 :

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

나는 그것을 불렀다. B에서 문제가 있다고 생각하지 않습니다. B에서 자동으로 A로 이동하여 로그인 대신 로그 아웃 버튼을 표시하므로 모든 것이 정상적인 것처럼 보입니다. –

+0

@VictorDomingosSantiago 어쨌든 저장하는 방법을 게시 할 수 있습니까? SharedPreferences를 망칠 수있는 유일한 방법은 잘못된 키를 사용하는 것입니다. onResume()에서 SharedP()를 호출하고 있습니까? ActivityB에서 ActivityA로 돌아 가면 onResume() 만 호출됩니다. –

+0

나는 A. –

0

이 hepful해야한다.

private boolean isLogged; 

// Check if the user is logged 
SharedPreferences settings = getSharedPreferences(SETTINGS_FILENAME, MODE_PRIVATE); 
isLogged= settings.getBoolean("isLogged", false); 
가 ... 다음 비교 :

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

안부

을 : B에서

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

A의

: 당신은 당신의 상황에 더 나은이를 변환해야

관련 문제