我试图使用自定义界面登录Facebook它在Activity类中工作正常.同样的事情我也必须在Fragment中做.但它没有正确登录我得到这个屏幕时,我点击Facebook按钮
当我点击继续按钮时,我没有收到我打印的Log.i()消息
这是我的片段代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentLoginBinding.inflate(inflater, container, false);
// facebook callback
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
loginWithFacebook(loginResult);
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
Log.e("Login With facebook", "onError: ", exception);
}
});
binding.btnRegisterFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginManager.getInstance().logInWithReadPermissions(requireActivity(), Arrays.asList("public_profile"));
}
});
return binding.getRoot();
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
private void loginWithFacebook(LoginResult loginResult) {
// here we will get access token and save data to server
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
String name = object.getString("name");
String id = object.getString("id");
// save to server
Log.i("Facebook auth",id);
Log.i("Facebook auth",name);
} catch (JSONException e) {
Log.e("Login With facebook", "onCompleted: ", e);
throw new RuntimeException(e);
}
// Application code
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();
}
字符串
我在我的主机活动中添加了这段代码
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
Fragment navhost = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
navhost.onActivityResult(requestCode,resultCode,data);
super.onActivityResult(requestCode, resultCode, data);
}
型
我在我的应用程序中使用导航组件,当我在Activity中使用它时,相同的代码运行良好
1条答案
按热度按时间wbrvyc0a1#
当我将回调和LoginManager代码从片段移到主机活动时,我最终解决了这个问题,代码变成了这样
字符串
我把剩下的代码添加到我的主机活动中,