【发布时间】:2015-05-31 16:21:27
【问题描述】:
按照这些说明 https://developers.facebook.com/docs/sharing/android 我已经实现了 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): 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): 在 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): 在 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(Native Method) 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): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
在线,
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 似乎都没有初始化。
applicationId 的唯一位置是在清单文件中。
<provider android:authorities="com.facebook.app.FacebookContentProviderXXX"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
XXX 是 applicationId,我已经正确地把它放在那里。其他所有事情也都完成了,例如,
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 的错误?
【问题讨论】:
标签: android facebook-android-sdk