Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题 [英] Facebook Android SDK v4.0.0 ShareDialog NullPointerException issue

查看:144
本文介绍了Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

按照这些说明 https://developers.facebook.com/docs/sharing/android 实现了Facebook ShareDialog出现在我的应用中,但它导致以下错误.

As per these instructions https://developers.facebook.com/docs/sharing/android I have implemented the Facebook ShareDialog to appear in my app but it's causing the following error.

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):at 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):at java.lang.reflect.Method.invoke(本机方法) 03-27 16:12:53.150:E/AndroidRuntime(10275):at 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): FATAL EXCEPTION: main 03-27 16:12:53.150: E/AndroidRuntime(10275): Process: au.com.elegantmedia.emotit, PID: 10275 03-27 16:12:53.150: E/AndroidRuntime(10275): java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference 03-27 16:12:53.150: E/AndroidRuntime(10275): at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.Utility.getDialogFeatureConfig(Utility.java:859) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.DialogPresenter.getVersionSpecForFeature(DialogPresenter.java:248) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.DialogPresenter.getProtocolVersionForNativeDialog(DialogPresenter.java:234) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.DialogPresenter.canPresentNativeDialogWithFeature(DialogPresenter.java:75) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.share.widget.ShareDialog.canShowNative(ShareDialog.java:133) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.share.widget.ShareDialog.access$0(ShareDialog.java:130) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:241) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:1) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.FacebookDialogBase.createAppCallForMode(FacebookDialogBase.java:184) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.FacebookDialogBase.showImpl(FacebookDialogBase.java:147) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.facebook.internal.FacebookDialogBase.show(FacebookDialogBase.java:142) 03-27 16:12:53.150: E/AndroidRuntime(10275): at au.com.elegantmedia.emotit.activities.MainActivity.onTellAFriendClick(MainActivity.java:299) 03-27 16:12:53.150: E/AndroidRuntime(10275): at au.com.elegantmedia.emotit.activities.MainActivity.onItemClick(MainActivity.java:194) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.widget.AdapterView.performItemClick(AdapterView.java:300) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.widget.AbsListView.performItemClick(AbsListView.java:1143) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.widget.AbsListView$3.run(AbsListView.java:3833) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.os.Handler.handleCallback(Handler.java:739) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.os.Handler.dispatchMessage(Handler.java:95) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.os.Looper.loop(Looper.java:135) 03-27 16:12:53.150: E/AndroidRuntime(10275): at android.app.ActivityThread.main(ActivityThread.java:5221) 03-27 16:12:53.150: E/AndroidRuntime(10275): at java.lang.reflect.Method.invoke(Native Method) 03-27 16:12:53.150: E/AndroidRuntime(10275): at java.lang.reflect.Method.invoke(Method.java:372) 03-27 16:12:53.150: E/AndroidRuntime(10275): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 03-27 16:12:53.150: E/AndroidRuntime(10275): at 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)

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

是下面的代码,

FetchedAppSettings settings = fetchedAppSettings.get(applicationId);

fetchedAppSettings-{}applicationId-null似乎都没有初始化.

Both fetchedAppSettings - {} and applicationId - null seems to be not initialised.

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

The only place the applicationId is, is in the manifest file.

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

XXX是applicationId,我已经正确地将它放在那里了.其他所有事情也都完成了,

XXX being the applicationId and I have put it there correctly. Everything else also done such as,

FacebookSdk.sdkInitialize(getApplicationContext());

    callBackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);
    shareDialog.registerCallback(callBackManager, new FacebookCallback<Sharer.Result>() {

        @Override
        public void onSuccess(Result result) {
            ELog.d(LOG_TAG, "success");
        }

        @Override
        public void onError(FacebookException error) {
            ELog.d(LOG_TAG, "error");
        }

        @Override
        public void onCancel() {
            ELog.d(LOG_TAG, "cancel");
        }
    });

onCreate()中进行呼叫,

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);
    }

当用户单击以共享内容时.有什么我想念的吗?还是我在新的SDK中遇到了导致NullPointerException的错误?

when user clicks to share content. Is there something that I have missed? Or am I running into some sort of a bug in the new SDK which causes the NullPointerException?

推荐答案

您还需要添加应用程序ID,如下所示:

You also need to add the application id like this:

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

这篇关于Facebook Android SDK v4.0.0 ShareDialog NullPointerException问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆