Android Facebook登录小部件:org.json.JSONException

3

我正在尝试在我的项目中学习和使用Facebook SDK,

一开始我遇到了以下问题:

com.facebook.widget.loginbutton无法实例化

然后我开始遇到以下问题:

activity_main.xml: org.json.JSONException

每当我启动应用程序时都会出现这个问题:

05-05 23:45:44.180: E/AndroidRuntime(31957): FATAL EXCEPTION: AsyncTask #1
05-05 23:45:44.180: E/AndroidRuntime(31957): java.lang.RuntimeException: An error occured while executing doInBackground()
05-05 23:45:44.180: E/AndroidRuntime(31957):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.lang.Thread.run(Thread.java:841)
05-05 23:45:44.180: E/AndroidRuntime(31957): Caused by: java.lang.NullPointerException
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:911)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at com.facebook.internal.Utility.queryAppSettings(Utility.java:372)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:667)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:1)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-05 23:45:44.180: E/AndroidRuntime(31957):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-05 23:45:44.180: E/AndroidRuntime(31957):    ... 4 more

我正在遵循Facebook开发者文档上的SDK文档,并已完成第一步,该应用程序与Facebook文档中说明的完全相同。
当我打开XML文件时,会抛出JSON错误。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        />

</LinearLayout>

并按“图形化布局”按钮。

需要帮助吗?过去12小时一直被这个问题困扰。

2个回答

12

更改您的应用程序清单文件

 <activity
        android:name="com.example.LoginActivity"
        android:label="@string/app_name" 
        android:parentActivityName="com.example.MainActivity" >


 </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"/>

请记得前往Facebook开发者网站中应用的控制台页面,复制您的应用程序ID,然后在res/strings.xml文件中创建字符串资源

<string name="app_id">YOUR APP ID</string>


@BadrEddine,对我来说仍然无法工作,登录小部件在xml本身中抛出异常。 - ManishSB
1
请注意,硬编码应用程序ID也不起作用。需要创建字符串资源。 - Shajeel Afzal
添加元数据对我有用。一个不同之处是我必须添加 com.facebook.FacebookActivity 而不是 com.facebook.LoginActivity。 - DJ_Polly

2
我遇到了同样的问题。在从https://developers.facebook.com/resources/facebook-android-sdk-current.zip下载Facebook SDK 3.14并将SDK更新到我的项目后,出现了相同的错误。我尝试多次清理项目并重新构建,但没有成功。
所以我再次阅读了“入门指南”(https://developers.facebook.com/docs/android/getting-started/),找到了这些信息:
“您必须取消选择'将项目复制到工作区'选项,以便每个示例项目保留对相邻SDK的正确引用。然而,这意味着Eclipse会创建一个指向SDK安装中项目的链接,而不是对其进行复制。”
因此,如果您已经导入了Facebook SDK和示例到您的工作区,请尝试将其删除,然后再次导入时取消选择“将项目复制到工作区”。引用Facebook的SDK并重新启动Eclipse。
这对我很有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接