Facebookガイド に従ってAndroid用のログインアプリを作成しています。後:
プロジェクトがコンパイルされます。しかし、マシンを実行してアプリケーションを開こうとすると、クラッシュして次のように表示されます。
残念ながら、アプリケーションは停止しました。
this や this のような同様の投稿を読んだ後、解決策を見つけることができませんでした。
Android 0.5.8、Oracle JDK7およびAPI16をtarget、として使用しています/ minおよびmax。
主なファイルは activity_main.xml
、 MainActivity.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)
問題はコードからではなく、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開発者アカウントにあります。
これを実行すると、コンパイルされるはずです
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>
私の場合は行方不明でした。
追加する必要があります
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>
アクティビティ内ではなく、アプリケーション内の適切な場所