0

私は1つの活動にこのコードを持っています:

  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);
        }

セッションを「有効」として表示し、新しいアクティビティを開始しますが、SharedPreferanceから返されるデータはnullですが、新しいアクティビティではまったく同じコードを使用します。他のアクティビティは、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);
            }

ご想像のとおり、ログは作成されておらず、メソッドが入力されていることを示しています。この奇妙な問題を解決するのを手伝ってくれる人はいますか?

4

4 に答える 4

3

これは、アクティビティの個人設定を使用しているためです。使用しているメソッドのドキュメントを参照してくださいgetPreferences。その活動に非公開!

代わりにこれを使用してください:

getSharedPreferences("some_identifier", MODE_PRIVATE);
于 2012-05-06T16:32:23.413 に答える
2

ドキュメントへのリンクはありませんが、私の経験:

import android.preference.PreferenceManager;

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

getApplicationContext()コンテキスト内で呼び出すことができます。

于 2012-05-06T16:31:46.317 に答える
0

設定はアクティビティごとに保存されます。アクティビティ間でそれらを共有したい場合は、最初のアクティビティから 2 番目のアクティビティに this-reference を渡す必要があります。

于 2012-05-06T16:31:03.337 に答える
0

によって返される設定は、呼び出されてgetPreferencesいる に排他的です。代わりに、アプリ全体の設定に使用してください。ActivityPreferenceManager.getDefaultSharedPreferences

于 2012-05-06T16:31:36.067 に答える