2012-05-06 6 views
0

У меня есть этот код в 1 деятельности:SharedPreferance потерял между деятельностью

mPrefs = getPreferences(MODE_PRIVATE); 
     String access_token = mPrefs.getString("access_token", null); 
     long expires = mPrefs.getLong("access_expires", 0); 
     if(access_token != null) { 
      facebook.setAccessToken(access_token); 
     } 
     if(expires != 0) { 
      facebook.setAccessExpires(expires); 
     } 

     if(!facebook.isSessionValid()) { 
      Log.e("Facebook Session","Invalid"); 
       //do facebook authorize... 
     } 
     else 
     { 
      Log.e("Facebook Session","valid"); 
      Intent nextActivity = new Intent (MainActivity.this, FacebookFriendsListActivity.class); 

      MainActivity.this.startActivity(nextActivity); 
     } 

Что делает, как excpeted, показывая сессию как «действительный» и начало новой деятельности, Но в новой деятельности я использую точно такой же код, хотя данные, возвращаемые из SharedPreferance, равны нулю. другая деятельность - ListActivity, если это имеет значение.

Это код в 2 деятельности:

  Log.e("Login","entered func"); 
      mPrefs = getPreferences(MODE_PRIVATE); 
      String access_token = mPrefs.getString("access_token", null); 
      long expires = mPrefs.getLong("access_expires", 0); 
      if(access_token != null) { 
       Log.e("acces_token","Isn't null"); 
       facebook.setAccessToken(access_token); 
      } 
      if(expires != 0) { 
       Log.e("expires","Isn't null"); 
       facebook.setAccessExpires(expires); 
      } 

Как вы могли догадаться, не Log сделано не было, кроме одной, которая показывает метод в настоящее время вводится. Помогите мне помочь решить эту проблему?

ответ

3

Это потому, что вы используете активность приватная предпочтения. См. Документацию по используемому методу getPreferences. Приватно для этой деятельности!

Используйте вместо этого:

getSharedPreferences("some_identifier", MODE_PRIVATE); 
+0

Благодаря человеку он работает сейчас, не знал об общей предпочтительности. –

0

Предпочтения сохранены за активность; если вы хотите поделиться ими между действиями, вам необходимо передать эту ссылку с первого на второе.

0

Предпочтения, возвращенные getPreferences, являются исключительными для Activity, в котором он находится. Используйте PreferenceManager.getDefaultSharedPreferences вместо глобальных настроек для вашего приложения.

2

Я не имею ссылку на документацию, но мой опыт:

import android.preference.PreferenceManager; 

... 
mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

Вы можете вызвать getApplicationContext() внутри контекста.

Смежные вопросы