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獲取數據。 –
是的這是正確的,但我需要一個對話框來阻止線程。因爲用戶登錄,然後他離開活動。該過程在用戶離開活動之前沒有機會下載圖片。我需要在他離開活動之前收集姓名和個人資料圖片。 –