2015-04-06 54 views
2

我想使用其SDK分享Facebook上的内容。我的参考是基于Facebook SDK 4.0.0的Facebook上的Share DialogFacebook SDK 4.0.0,Android上的ShareDialog始终为空

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

我也有代码以下行中我manifest文件Application标签内:

<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异常”抛出。我还没有看到我日志的onActivityResult因此该功能不会被调用。

enter image description here

最后日志显示:

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) 

任何建议,将不胜感激感谢

回答

7

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

1)我忘了Facebook的活动添加到我的清单文件(这就是为什么我没有登录的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)您MUST创建facebook_app_id您的strings.xml内文件和链接元数据,而不是直接把你的app_id在那里。

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

经过这些更改,我可以在我的项目中看到Facebook对话框。 这些事浪费了我两天的时间,希望不会发生在你身上。

+0

我在manifeset中添加了FacebookActivity,元数据和提供程序,并且还使用了字符串资源来保存FB_app_id值,我只在元标记中使用了这个值,在提供者标记中使用了实际的id,但仍然有相同的错误。你能提出一些建议吗? – Crawler 2015-06-12 11:03:54

+0

@crwler如果以上两项是正确的,请确保您生成的哈希码也可以。我的建议是使用他们的示例代码来生成一个,否则,如果您基于命令生成,那么它总是创建一个,而不管命令是正确还是错误。 – Hesam 2015-06-13 05:04:04

+2

我有这个问题,并从您的评论,然后我看了一下更多的源,并在Facebook SDK初始化有一个有趣的位。 您必须链接到字符串资源,或用'fb'作为ID前缀。所以: 基本上,代码需要属性值为String。如果你只是输入你的ID,那么它显然是以int的形式输入的。如果他们发现这个值,他们实际上会抛出一个异常,但它是一个int而不是仅仅处理它。我猜想如果他们以后需要alpha代码的话,这是未来的保证。 – Simon 2016-04-06 15:05:49