0

最新のFacebookSDK(3.0)では、コンテキスト/パッケージ/アプリケーションに関連付けられたメタデータからアプリケーションIDをプルしようとするSessionコンストラクターにチェックがあります。

ApplicationInfo ai = context.getPackageManager().getApplicationInfo(
                context.getPackageName(), PackageManager.GET_META_DATA);
        if (ai.metaData != null) {
            System.out.println("So depressed " + ai.metaData.getString(APPLICATION_ID_PROPERTY));
            return ai.metaData.getString(APPLICATION_ID_PROPERTY);
        }

このデータがnullの場合、Sessionコンストラクターは失敗し、nullポインターエラーがスローされます。

Sessionオブジェクトをインスタンス化するアクティビティで、次のメタデータを入力しようとします。

ai = this.getPackageManager().getApplicationInfo(
                    this.getPackageName(), PackageManager.GET_META_DATA);
            if (ai.metaData != null) {
                ai.metaData.putString(Session.APPLICATION_ID_PROPERTY, AppConfig.getFacebookAppId()+"");
            }

Sessionオブジェクトをインスタンス化する前に、メタデータが適切に設定されていることを確認しました。ただし、Sessionがコンストラクターから呼び出すメソッド内では、メタデータはnullです。

私が知っている2つのこと:コンテキストのメモリアドレスは同じであるため、同じオブジェクトのように見えます。ただし、のメモリアドレス

this.getPackageManager().getApplicationInfo(
                        this.getPackageName(), PackageManager.GET_META_DATA);

異なっているように見えます。それが何か意味があるのか​​わかりません。

私の最終的な質問は、このメタデータをこのように渡すことができるかどうかです。もしそうなら、ここで何が失敗していますか?

4

1 に答える 1

-4

OP は次のように書いています。

上記の方法ではできません。できることは、メタデータ タグ内のマニフェストの値だけです。<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebookAppId" />

@ミン・リーは次のように書いています。

正解です。コードで既にアプリ ID を使用できる場合は、Session.Builder を介してそれを渡すことができます。メタデータは便利なメカニズムにすぎません。

于 2015-06-10T18:47:53.040 に答える