Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题_Android_Facebook Android Sdk - Fatal编程技术网

Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题

Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题,android,facebook-android-sdk,Android,Facebook Android Sdk,根据这些说明,我已经实现了在我的应用程序中显示Facebook ShareDialog,但它导致了以下错误 03-27 16:12:53.150:E/AndroidRuntime(10275):致命异常:主 03-27 16:12:53.150:E/AndroidRuntime(10275):进程:au.com.elegantmedia.emotit,PID:10275 03-27 16:12:53.150:E/AndroidRuntime(10275):java.lang.NullPointe

根据这些说明,我已经实现了在我的应用程序中显示Facebook ShareDialog,但它导致了以下错误

03-27 16:12:53.150:E/AndroidRuntime(10275):致命异常:主 03-27 16:12:53.150:E/AndroidRuntime(10275):进程:au.com.elegantmedia.emotit,PID:10275 03-27 16:12:53.150:E/AndroidRuntime(10275):java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“int java.lang.Object.hashCode()” 03-27 16:12:53.150:E/AndroidRuntime(10275):在java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.Utility.getDialogFeatureConfig(Utility.java:859)上 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.DialogPresenter.getVersionSpecForFeature(DialogPresenter.java:248)上 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.DialogPresenter.getProtocolVersionForNativeDialog(DialogPresenter.java:234) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.DialogPresenter.canPresentNativeDialogWithFeature(DialogPresenter.java:75)上 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.share.widget.ShareDialog.canShowNative(ShareDialog.java:133) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.share.widget.ShareDialog.access$0(ShareDialog.java:130) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:241) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:1) 03-27 16:12:53.150:E/AndroidRuntime(10275):位于com.facebook.internal.FacebookDialogBase.createAppCallForMode(FacebookDialogBase.java:184) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.FacebookDialogBase.showImpl(FacebookDialogBase.java:147) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.FacebookDialogBase.show(FacebookDialogBase.java:142) 03-27 16:12:53.150:E/AndroidRuntime(10275):在au.com.elegantmedia.emotit.activities.MainActivity.onTellAFriendClick(MainActivity.java:299) 03-27 16:12:53.150:E/AndroidRuntime(10275):在au.com.elegantmedia.emotit.activities.MainActivity.onItemClick(MainActivity.java:194) 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.widget.AdapterView.performItemClick(AdapterView.java:300) 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.widget.AbsListView.performItemClick(AbsListView.java:1143) 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.widget.AbsListView$PerformClick.run(AbsListView.java:3044) 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.widget.AbsListView$3.run(AbsListView.java:3833) 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.os.Handler.handleCallback(Handler.java:739)上 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.os.Handler.dispatchMessage(Handler.java:95)上 03-27 16:12:53.150:E/AndroidRuntime(10275):在android.os.Looper.loop(Looper.java:135)上 03-27 16:12:53.150:E/AndroidRuntime(10275):位于android.app.ActivityThread.main(ActivityThread.java:5221) 03-27 16:12:53.150:E/AndroidRuntime(10275):位于java.lang.reflect.Method.invoke(本机方法) 03-27 16:12:53.150:E/AndroidRuntime(10275):位于java.lang.reflect.Method.invoke(Method.java:372) 03-27 16:12:53.150:E/AndroidRuntime(10275):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 03-27 16:12:53.150:E/AndroidRuntime(10275):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

在第一线

03-27 16:12:53.150:E/AndroidRuntime(10275):在com.facebook.internal.Utility.getDialogFeatureConfig(Utility.java:859)上

是下面的一段代码

FetchedAppSettings settings = fetchedAppSettings.get(applicationId);
fetchedAppSettings
-
{}
applicationId
-
null
似乎都未初始化

applicationId的唯一位置是在清单文件中

<provider android:authorities="com.facebook.app.FacebookContentProviderXXX"
      android:name="com.facebook.FacebookContentProvider"
      android:exported="true"/>

当用户单击以共享内容时。有什么我错过的吗?或者我在新的SDK中遇到了某种导致
NullPointerException
的bug?

您还需要像这样添加应用程序id:

<application android:label="@string/app_name" ...>
  ...
  <meta-data android:name="com.facebook.sdk.ApplicationId"  android:value="@string/facebook_app_id"/>
  ...
</application>

...
...
(希望FB有人会读到)

除了Gokhan Caglar给出的(正确)建议外,还要注意:不要将应用程序id号直接写入AndroidManifest.xml!为了让FB工作,还必须根据strings.xml文件中的最佳实践正确定义应用程序id

因为app id也在provider标记下使用,但是直接作为数字,所以我也做了将app id号直接写入元数据标记的快捷方式。大错特错,两天过去了

看起来,FB将使用从AndroidManifest.xml和直接基于strings.xml中的定义获取的应用程序id。两者都必须在那里。应用程序id必须在strings.xml中定义。这就解决了问题

对于FB开发团队,有几个建议可以节省人们的时间:

  • 要么删除对app id的过度严格使用,要么在教程中解释这是唯一的方法。(比安卓本身更严格)

  • 当应用程序定义不正确时,制作一个更好的错误报告系统作为覆盖。在FB的深处,这样一个空异常很快就会成为你的时间窃贼。在本例中,类型为“error:app id not defined In strings.xml”的错误报告是令人满意的

  • 关于本教程,它还包含一个陷阱,因此我提到了它:如果您在这里运行本教程:,在您已经插入了用于开发的密钥散列之后,如果事情不起作用,您可以轻松地执行一些操作,那么请注意本教程
    if (ShareDialog.canShow(ShareLinkContent.class)) {
            ShareLinkContent linkContent = new ShareLinkContent.Builder()
                    .setContentTitle("Hello Facebook")
                    .setContentDescription(
                            "The 'Hello Facebook' sample  showcases simple Facebook integration")
                    .setContentUrl(
                            Uri.parse("http://developers.facebook.com/android"))
                    .setImageUrl(Uri.parse("https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xfa1/t39.2178-6/11057086_1577191859234204_214246289_n.png"))
                    .build();
    
            shareDialog.show(linkContent);
        }
    
    <application android:label="@string/app_name" ...>
      ...
      <meta-data android:name="com.facebook.sdk.ApplicationId"  android:value="@string/facebook_app_id"/>
      ...
    </application>
    
    <string name="id_facebook">id_facebook</string>
    
    <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/id_facebook" />