web-dev-qa-db-ja.com

Facebookログインの例でjava.lang.RuntimeException

Facebookガイド に従ってAndroid用のログインアプリを作成しています。後:

  1. 仮想デバイスにFacebookアプリ(不要)をインストールします
  2. FacebookSDKをAndroid Studio as Module
  3. 前のモジュールをプロジェクトにインポートし、
  4. ガイドの指示に従ってコードを変更します

プロジェクトがコンパイルされます。しかし、マシンを実行してアプリケーションを開こうとすると、クラッシュして次のように表示されます。

残念ながら、アプリケーションは停止しました。

thisthis のような同様の投稿を読んだ後、解決策を見つけることができませんでした。

Android 0.5.8、Oracle JDK7およびAPI16をtargetとして使用しています/ minおよびmax

主なファイルは activity_main.xmlMainActivity.Java および MainFragment.Java

最新のlogcat出力は次のとおりです。

05-30 03:15:54.127      647-664/com.jdk8.minifacebookloginapp.app E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Java.lang.RuntimeException: An error occured while executing doInBackground()
            at Android.os.AsyncTask$3.done(AsyncTask.Java:299)
            at Java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.Java:273)
            at Java.util.concurrent.FutureTask.setException(FutureTask.Java:124)
            at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:307)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
            at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
            at Java.lang.Thread.run(Thread.Java:856)
     Caused by: Java.lang.NullPointerException
            at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:781)
            at com.facebook.internal.Utility.queryAppSettings(Utility.Java:372)
            at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:676)
            at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:673)
            at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
            at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
            at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1076)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:569)
            at Java.lang.Thread.run(Thread.Java:856)
26
Lucio

問題はコードからではなく、FacebookSDKから発生しています。 NullPointerExceptionの上部を見ればわかります

Caused by: Java.lang.NullPointerException
        at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:781)
        at com.facebook.internal.Utility.queryAppSettings(Utility.Java:372)

最後の2行のエラーは、facebook sdk(com.facebook.internal)とJava.utilパッケージからのものであり、どちらもコードからのものではありません。

これを修正するには、Androidキーハッシュを生成した後にアプリを登録するAndroidのFacebookの はじめに チュートリアルでセットアップを完了する必要があります。それが終わったら、AndroidManifest.xmlを開き、メタデータ行を追加します。

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>
    <activity
        Android:name=".MainActivity"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

次に、app_idをstrings.xmlファイルに追加します( Facebook開発者アカウント の設定ページにあります)アプリIDはFacebook開発者アカウントにあります。

これを実行すると、コンパイルされるはずです

70
Todd Anderson
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>

私の場合は行方不明でした。

3
Vihaan Verma

追加する必要があります

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

アクティビティ内ではなく、アプリケーション内の適切な場所

0
user5138430