我正在尝试在xamarin表单项目中使用Xamarin Facebook Sdk组件。 基本上,我在我的PCL中创建了一个视图,并为android创建了一个自定义渲染器实现,如下所示的代码:
[assembly: ExportRenderer (typeof (LoginButtonFacebook), typeof (LoginButtonFacebookRenderer))]
namespace Everest.Droid
{
public class LoginButtonFacebookRenderer : ViewRenderer<LoginButtonFacebook, Android.Views.View>
{
protected override void OnElementChanged (ElementChangedEventArgs<LoginButtonFacebook> e)
{
base.OnElementChanged (e);
if (Control == null)
{
FacebookSdk.SdkInitialize (MainActivity.Instance);
var callbackManager = CallbackManagerFactory.Create ();
var loginCallback = new FacebookCallback<LoginResult> {
HandleSuccess = loginResult => {
DebugUtil.WriteLine ("Logged in with facebook");
},
HandleCancel = () => {
DebugUtil.WriteLine ("Login with facebook cancel");
},
HandleError = loginError => {
DebugUtil.WriteLine ("Login with facebook error");
}
};
LoginManager.Instance.RegisterCallback (callbackManager, loginCallback);
LoginButton button = new LoginButton (this.Context);
button.LayoutParameters = new LayoutParams (LayoutParams.WrapContent, LayoutParams.WrapContent);
button.SetToolTipMode (LoginButton.ToolTipMode.NeverDisplay);
var permissions = new List<string> { "public_profile", "email" };
button.SetReadPermissions (permissions);
button.Click += (object sender, EventArgs ev) =>
{
var loginManager = LoginManager.Instance;
if (loginManager != null)
loginManager.LogInWithReadPermissions (MainActivity.Instance, permissions);
};
this.SetNativeControl (button);
}
(...)
当我点击facebook登录按钮时,它会抛出以下NullPointerException:
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] java.lang.NullPointerException
[AndroidRuntime] at com.facebook.login.LoginManager.getLogger(LoginManager.java:392)
[AndroidRuntime] at com.facebook.login.LoginManager.logStartLogin(LoginManager.java:403)
[AndroidRuntime] at com.facebook.login.LoginManager.startLogin(LoginManager.java:360)
[AndroidRuntime] at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:262)
[AndroidRuntime] at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
[AndroidRuntime] at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29)
[AndroidRuntime] at com.facebook.FacebookButtonBase.callExternalOnClickListener(FacebookButtonBase.java:204)
[AndroidRuntime] at com.facebook.login.widget.LoginButton.access$1100(LoginButton.java:55)
[AndroidRuntime] at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:764)
[AndroidRuntime] at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:361)
[AndroidRuntime] at android.view.View.performClick(View.java:4261)
[AndroidRuntime] at android.view.View$PerformClick.run(View.java:17420)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:615)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:92)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:137)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:4947)
[AndroidRuntime] at java.lang.reflect.Method.invokeNative(Native Method)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:511)
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
[AndroidRuntime] at dalvik.system.NativeStart.main(Native Method)
我不知道我做错了什么。