2013-04-22 3 views
70

私はFacebookと私のアプリを統合するために以下のチュートリアルに従ってきました。 Facebook tutorialAndroidのfacebook applicationIdはnullにできません

私はチュートリアルですべてを追ってきましたが、私はapplicationId cannot be nullを2つのケースで受け取りました。本当にイライラしています。私はアクティビティを表示しようとすると、しかし、私はapplicationId cannot be nullを得る

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(this, callback); 
    uiHelper.onCreate(savedInstanceState); 
    setContentView(R.layout.main_fb); 

    FragmentManager fm = getSupportFragmentManager(); 
    fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment); 
    fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment); 

    FragmentTransaction transaction = fm.beginTransaction(); 
    for(int i = 0; i < fragments.length; i++) 
    { 
     transaction.hide(fragments[i]); 
    } 
    transaction.commit(); 
} 

、およびLogCatがに私を指すの行は、次のとおりです:

FacebookActivityonCreateは、チュートリアルとまったく同じであるとして、次のを持っていuiHelper.onCreate(savedInstanceState);

それで、私はその行をコメントアウトしてみました。そして活動が表示されます。しかし今ではLoginButtonをクリックすると、同じエラーが表示されますが、今回はfacebookからLoginButtonクラスのapplicationIdフィールドを指しています。

私はすでに私の文字列値のidと、このように私のマニフェストいます

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/APP_ID"/> 

は、私は、コードを使用して同上を取得しようとしたが、何も変わっていません。

このすべての原因は何ですか?

答えて

225

TL; DR:あなたは、あなたがAndroidManifest.xmlに(値として)それを直接置けば、それは動作しませんので、ごstrings.xmlして、参照(すなわち@strings/fb_app_id)でアプリケーションのIDを書き込むことを持っている

あなたは、このようなAndroidManifest.xml であなたのapplicationIdを定義する必要があります。app_idはあなたstrings.xml内の文字列である

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>

<application android:label="@string/app_name"....下のタグ


サンプル:

<application android:label="@string/app_name" 
       android:icon="@drawable/icon" 
       android:theme="@android:style/Theme.NoTitleBar" 
      > 
     <activity android:name=".HelloFacebookSampleActivity" 
        android:label="@string/app_name" 
        android:windowSoftInputMode="adjustResize"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.facebook.LoginActivity" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar" 
        android:label="@string/app_name" /> 
     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 
    </application> 

** <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/><application>タグ

以内であることに注意してください - とのstrings.xml

<string name="app_id">1389xxxxxxxx</string> 
+0

それは '' タグの代わりに、 '' タグ内の内のメタコードを挿入するアプリケーション]タブからの入力を思え –

+0

ありがとうございました。ありがとう、相棒 ! – Megamind

+2

ええと...私は急いでこのチュートリアルのこのセクションを読んだ。 StackOverflow再びftw。 – Joe

7

に問題はidがあるということです整数に変換される: https://code.google.com/p/android/issues/detail?id=78839

facebook_app_idはフレーバーごとにファイルbuild.gradleから設定されていました。

flavor.resValue "string", "facebook_app_id", "\"1111111111111\"" 

か、むしろエスケープを避けるかの:

ソリューションは"でIDをラップした

flavor.resValue "string", "facebook_app_id", '"1111111111111"' 
+0

flavor.resValue "string"、 "facebook_app_id"、 "" 1111111111111 " このソリューションは私のために働いた。ありがとうございます – MiloRambaldi

-1

実はあなたはGradleの風味コードを使用する必要はありません...

数字が4バイトより大きい場合は、このコードをstrings.xmlで指定してください。

:注意、この引用符("

<string name="facebook_app_id">"1111111111111"</string> 
8

今日ので、答えは非常に正しいではありません。 誰かがこれを使用しなかった場合:あなたがそれを行う必要がありますか、アプリの意志がクラッシュした最後の更新以来 AppEventsLogger.activateApp(this);

を。 そして、あなたもここアプリケーションないコンテキスト

https://developers.facebook.com/docs/android/getting-started

​​
+2

何が一体。これでアプリがクラッシュしました。それは私ですか、Facebookは私たちのことを覗いてみませんか? まず、グラフAPIからのメッセージの取得を無効にします。その後、9271491724権限が必要なメッセンジャーアプリをインストールしない限り、モバイルブラウザ上のメッセージは無効になり、イベントロガーでアプリをログするようになります。 – SudoPlz

+0

@Yuraは私の人生を保存しました – Javier

+0

いつ追加しましたか? AppEventsLogger.activateApp(this); 数日前ですか?昨日私はそれに問題がなかったので – Binev

0

活動でこの小さなコード変更が私を助けを渡す必要があります。

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     AppEventsLogger.activateApp(getApplication()); 

     super.onCreate(savedInstanceState); 
     ................... 
     ...................  
} 
関連する問題