最新の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);
異なっているように見えます。それが何か意味があるのかわかりません。
私の最終的な質問は、このメタデータをこのように渡すことができるかどうかです。もしそうなら、ここで何が失敗していますか?