Facebook的SDK 4.0.0,ShareDialog在Android上总是空 [英] Facebook SDK 4.0.0, ShareDialog on Android is always null

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

问题描述

我想用它的SDK在Facebook上分享的东西。我参考分享对话框基于在Facebook SDK 4.0.0的Facebook 的。

I want to share something on Facebook using its SDK. My reference is Share Dialog by Facebook based on Facebook SDK 4.0.0.

    CallbackManager callbackManager;
        ShareDialog shareDialog;

        @Override
        protected void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);

            this.getWindow().addFlags(Window.FEATURE_NO_TITLE);
            this.setContentView(R.layout.v3_activity_splash);

            // Init Facebook SDK
            FacebookSdk.sdkInitialize(getApplicationContext());
            callbackManager = CallbackManager.Factory.create();
            shareDialog = new ShareDialog(this);
            shareOnFacebook("This is test...");

            ...
        }

    private void shareOnFacebook(String content)
    {
        if (ShareDialog.canShow(ShareLinkContent.class))
        {
            Log.e("Test", "inside shareOnFacebook()");

            //            ShareLinkContent shareLinkContent = new ShareLinkContent.Builder().setContentDescription(content).build();
            ShareLinkContent linkContent = new ShareLinkContent.Builder()
                    .setContentTitle("Hello Facebook")
                    .setContentDescription(content)
                    .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
                    .build();

            shareDialog.show(linkContent);
        }
        else
        {
            Toast.makeText(this, "NOT CALLED", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);

        Log.e("Test", "Yes, Uuu bitch!!!");
    }

我也有如下的应用标记中在我的清单文件code线:

I also have following lines of code in my manifest file within Application tag:

<meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="MY_APP_ID"/>

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

我的问题是NullPointerException异常,当我发动 shareDialog.show(linkContent)应用程序/活动; 行。然而,有趣的是, shareDialog IS NOT NULL根据我调试:(所以不知道为什么NullPointerException异常抛出。我还没有看到我的日志<$ C的$ C>的onActivityResult 因此该功能不会被调用。

My problem is NullPointerException when I launch the app/activity on shareDialog.show(linkContent); line. However, funny thing is shareDialog is not null based on my debug :( So have no idea why "NullPointerException" throws. I also don't see my log of onActivityResult therefore this function does not get called.

最后,日志显示:

Process: MY_PCKAGE_NAME, PID: 2152
    java.lang.RuntimeException: Unable to start activity ComponentInfo{MY_PCKAGE_NAME/MY_PCKAGE_NAME.v3.splash.SplashActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2281)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5230)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:780)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:883)
            at com.facebook.internal.Utility.getDialogFeatureConfig(Utility.java:859)
            at com.facebook.internal.DialogPresenter.getVersionSpecForFeature(DialogPresenter.java:247)
            at com.facebook.internal.DialogPresenter.getProtocolVersionForNativeDialog(DialogPresenter.java:234)
            at com.facebook.internal.DialogPresenter.canPresentNativeDialogWithFeature(DialogPresenter.java:75)
            at com.facebook.share.widget.ShareDialog.canShowNative(ShareDialog.java:133)
            at com.facebook.share.widget.ShareDialog.access$300(ShareDialog.java:55)
            at com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:241)
            at com.facebook.share.widget.ShareDialog$NativeHandler.canShow(ShareDialog.java:233)
            at com.facebook.internal.FacebookDialogBase.createAppCallForMode(FacebookDialogBase.java:184)
            at com.facebook.internal.FacebookDialogBase.showImpl(FacebookDialogBase.java:147)
            at com.facebook.internal.FacebookDialogBase.show(FacebookDialogBase.java:142)
            at MY_PCKAGE_NAME.splash.SplashActivity.shareOnFacebook(SplashActivity.java:414)
            at MY_PCKAGE_NAME.splash.SplashActivity.onCreate(SplashActivity.java:93)
            at android.app.Activity.performCreate(Activity.java:5411)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5230)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:780)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596)
            at dalvik.system.NativeStart.main(Native Method)

任何建议将AP preciated。谢谢你。

Any suggestion would be appreciated. Thanks.

推荐答案

我刚刚创建了一个示例项目找到哪里是我的问题,终于发现我有两个错误。其实他们中的一个是不是因为我,Facebook是疯了!

I just created a sample project to find where is my problem and finally found I had two mistakes. Actually one of them is not because of me, Facebook is crazy!

1)我忘了Facebook的活动添加到我的清单文件(这就是为什么我没有得到的日志的onActivityResult

1) I forgot to add Facebook activity into my manifest file (That's why I didn't get log of OnActivityResult)

<!-- Facebook -->
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

2)您必须创建 facebook_app_id strings.xml档案中并链接元数据里面,与其直接把你的APP_ID那里。

2) You MUST create facebook_app_id inside your strings.xml file and link meta-data to that instead of directly put your app_id there.

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

这些更改后,我能看到Facebook的对话框在我的项目。
这些东西浪费掉我,希望这两天不会发生在你身上。

After these changes I'm able to see Facebook dialog in my project. These things wasted TWO days of mine and hope doesn't happen to you.

这篇关于Facebook的SDK 4.0.0,ShareDialog在Android上总是空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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