我正在尝试使用Facebook Api 4.5
为我的登录方法返回结果
但问题是当结果返回前回调方法
我的代码:
public class FacebookServiceImpl implements FacebookService {
private AndroidLauncher androidLauncher;
public CallbackManager callbackManager;
private boolean loginSuccess;
public FacebookServiceImpl(AndroidLauncher androidLauncher) {
this.androidLauncher = androidLauncher;
}
public boolean login() {
callbackManager = CallbackManager.Factory.create();
List<String> permission = new ArrayList<>();
CallbackManager cm;
permission.add("user_photos");
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Gdx.app.log("onSuccess",loginSuccess+"");
loginSuccess = true;
}
@Override
public void onCancel() {
Gdx.app.log("onCancel",loginSuccess+"");
loginSuccess = false;
}
@Override
public void onError(FacebookException exception) {
Gdx.app.log("onError",loginSuccess+"");
loginSuccess = false;
}
});
LoginManager.getInstance().logInWithReadPermissions(androidLauncher, permission);
Gdx.app.log("Returning result",loginSuccess+"");
return loginSuccess;
}
} 控制台记录“返回结果”之前“onSuccess”
所以我想在返回结果之前等待LoginManager完成执行
答案 0 :(得分:0)
如果您真的想这样做,可以试试这个,
但我认为你应该在登录成功时调用一个方法并运行该代码,而不是检查条件是否为真,然后运行代码
public boolean login(final MyListener myListener) {
callbackManager = CallbackManager.Factory.create();
List<String> permission = new ArrayList<>();
CallbackManager cm;
permission.add("user_photos");
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Gdx.app.log("onSuccess",loginSuccess.toString());
myListener.success(true);
}
@Override
public void onCancel() {
Gdx.app.log("onCancel",loginSuccess.toString());
myListener.success(false);
}
@Override
public void onError(FacebookException exception) {
Gdx.app.log("onError",loginSuccess.toString());
myListener.success(false);
}
});
LoginManager.getInstance().logInWithReadPermissions(androidLauncher, permission);
Gdx.app.log("Returning result",loginSuccess.toString());
}
interface MyListener{
void success(boolean result);
}
...
login(new MyListener() {
@Override
public void success(boolean result) {
//Some Stuff
}
});