gpt4 book ai didi

android - 使用 Facebook SDK 的 NullPointer

转载 作者:搜寻专家 更新时间:2023-11-01 09:47:32 26 4
gpt4 key购买 nike

我在我的应用程序中使用 Facebook SKD,但出现下一个错误:

我在 onActivityResult() 方法中的 callBackmanager 为空,我得到 NullPointerException

这是我的代码:

parent.findViewById(R.id.fb_login_button).setOnClickListener(this);

在哪里R.id.fb_login_button - 我的 fb 自定义按钮。

当我点击这个按钮时,我的监听器调用这个方法:

private void onFacebookButtonClick() {

initFacebook(getView());
mFacebookLoginButton.performClick(); // this is button from SDK, Visibility - GONE
}

还有这个initFacebook(View parent)方法:

callbackManager = CallbackManager.Factory.create();

mFacebookLoginButton = (LoginButton) parent.findViewById(R.id.login_button);
mFacebookLoginButton.setReadPermissions("public_profile");
mFacebookLoginButton.setFragment(this);
mFacebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {

String userId = loginResult.getAccessToken().getUserId();
trySocialLogin(userId, Constants.PROVIDER_FACEBOOK);
}

@Override
public void onCancel() {
Log.e("FB", "onCancel()");
}

@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
}
});

onActivityResult() 中的这段代码:

callbackManager.onActivityResult(requestCode, resultCode, data); // callbackManager is null here - why?

添加日志:

    Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.nashkvartal/com.nashkvartal.StartScreenActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=129742, result=0, data=null} to activity {com.nashkvartal/com.nashkvartal.StartScreenActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3287)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2661)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5691)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=129742, result=0, data=null} to activity {com.nashkvartal/com.nashkvartal.StartScreenActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3887)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3269)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2661)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5691)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference
at com.nashkvartal.fragments.LoginFragment.onActivityResult(LoginFragment.java:105)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:176)
at com.nashkvartal.StartScreenActivity.onActivityResult(StartScreenActivity.java:74)
at android.app.Activity.dispatchActivityResult(Activity.java:6344)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3883)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3269)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2661)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5691)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

UPD - 添加了 onActivityResult() 完整代码

@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {

if (currentProvider == Constants.PROVIDER_FACEBOOK) {
callbackManager.onActivityResult(requestCode, resultCode, data); // I catch NullPointer here
}

super.onActivityResult(requestCode, resultCode, data);
}

最佳答案

As per newer Facebook SDK. You should override onActivityResult with super.

对于较新的 SDK 使用:

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

And make sure For the login to work, Your onActivityResult() method should be outside the FacebookCallback anonymous class.

编辑 1

As from your code you need to init SDK before setContentView. Currently in your code it is called below setContentView so change it.

像这样。

FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_start_screen);

关于android - 使用 Facebook SDK 的 NullPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37274943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com