Android Facebook登录无法使用空调用包调用LoginFragment
我已将facebook登录添加到我的应用程序中 第一次我能够登录没有任何问题。但在登录之后,我就退出了。我在日志中发现了这个错误Android Facebook登录无法使用空调用包调用LoginFragment,android,facebook,android-facebook,launchmode,Android,Facebook,Android Facebook,Launchmode,我已将facebook登录添加到我的应用程序中 第一次我能够登录没有任何问题。但在登录之后,我就退出了。我在日志中发现了这个错误 E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance. 我搜索了一下谷歌。通过将launchmode设置为standard,解决了一些错误。我没有指
E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.
我搜索了一下谷歌。通过将launchmode设置为standard,解决了一些错误。我没有指定任何启动模式。但我还是试着用它
<activity
android:name=".activities.LoginActivity"
android:launchMode="standard"/>
4我使用自定义按钮登录。当我点击fb登录按钮时。我正在使用这个代码
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//My Stuff Here
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,first_name,last_name,link,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
//Cancel Stuff
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
//Error Stuff
}
}); LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
6要注销,我使用了LoginManager.getInstance().logout()
7但我尝试使用自定义按钮再次登录,调试指针指向行LoginManager.getInstance().registerCallback()
,但回调的所有方法(onSuccess(LoginResult LoginResult)
,onError()
,onError(FacebookException异常)
)都无法调用。我得到一个日志,上面写着E/LoginFragment:cannotcallloginFragment与null调用包。如果调用方的启动模式为singleInstance,则可能发生这种情况。
更改此设置
LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)上下文,
asList(public_profile,email)代码>
到
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
asList(public_profile,email)代码>首先,Facebook没有给出确切的异常细节
Sushobh Nadiger的回答帮助我解决了这个问题
我想将facebook登录代码与我的LoginActivity隔离开来,并将JSONObject返回给LoginActivity,因此我创建了一个名为SocialLogin.java的类来处理社交登录,并通过LoginManager.getInstance().registerCallback(callbackManager,
新建FacebookCallback(){//More Stuff here}
并调用facebook登录LoginManager.getInstance().logInWithReadPermissions()
有关详细信息,请参阅相关完整代码
这才是真正的问题。所以我在LoginActivity.java中调用了这些函数(registerCallback()和logInWithReadPermissions()),结果成功了。
然而,作为开发人员,我认为像facebook这样的公司应该给我们适当的错误,而不是像我这样的误导性错误,这样我们的宝贵时间就不会被浪费。谢谢,你的回答帮助我抓住了这个问题。见下面我的回答。
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//My Stuff Here
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,first_name,last_name,link,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
//Cancel Stuff
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
//Error Stuff
}
}); LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}