0
我需要在用户登录后收集用户名和个人资料图片。我需要在登录过程中这样做,我试图在FacebookCallback<LoginResult>
的onSuccess
Methode中尝试,但它失败。Facebook图形登录onSuccess执行中,然后等待
我的代码:
btnFbLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
final String userId = loginResult.getAccessToken().getUserId();
final String authToken = loginResult.getAccessToken().getToken();
// Facebook Name, Profile Picture
/*GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
userName = object.getString("name");
String url = object.getString("picture");
URL facebookProfileURL = new URL(url);
Bitmap profPict = BitmapFactory.decodeStream(facebookProfileURL.openConnection().getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
profPict.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
profilePicAsString = Base64.encodeToString(b, Base64.DEFAULT);
facebookAuthObject.setUserId(userId);
facebookAuthObject.setAuthToken(authToken);
facebookAuthObject.setName(userName);
facebookAuthObject.setProfilePictureAsString(profilePicAsString);
} catch (JSONException | IOException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "name, picture.width(150).height(150)");
request.setParameters(parameters);
request.executeAsync();*/
}
@Override
public void onCancel() {
Log.i(TAG, "User cancel");
}
@Override
public void onError(FacebookException e) {
Log.e(TAG, e.getLocalizedMessage());
}
});
}
我需要的东西像executeAndWait
但这是不可能的,因为我在主线程上。
有了这个我有问题,如果用户离开活动太快,我什么也没有,因为异步。
有没有人知道我可以如何阻止ui线程?或其他解决方案收集名称和个人资料图片?
感谢的提前
这并不能解决问题。和我的代码一样,如果用户快速离开活动,我没有用户数据。 –
只有在onSuccess()方法中,您才会获得数据。如果用户离开该进程将无法完成从Facebook获取数据。 –
是的这是正确的,但我需要一个对话框来阻止线程。因为用户登录,然后他离开活动。该过程在用户离开活动之前没有机会下载图片。我需要在他离开活动之前收集姓名和个人资料图片。 –