我有一个方法
public String getProfileUrl() {
for (UserInfo profile : sCurrentUser.getProviderData()) {
String provider = profile.getProviderId();
if (provider.equals("facebook.com")) {
getFacebookAvatarPhoto();
} else {
mProfileUrl = sCurrentUser.getPhotoUrl().toString();
}
}
return mProfileUrl;
}
getFacebookAvatarPhoto 方法在单独的线程上运行。我怎样才能等待这个方法完成,然后才返回值?
private void getFacebookAvatarPhoto() {
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
response -> {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
mProfileUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).executeAsync();
}
您不应该强制异步方法在主线程上同步运行。如果这样做,应用程序将冻结,系统将在 5 秒后提供终止进程。
处理异步请求时,主线程需要其结果,即 要在界面中显示,它们必须异步处理。
您可以使用 rxJava 将带有回调的异步调用转换为
rxJava
. 像这样的东西:现在你可以订阅这个(示例代码,我不记得方法签名了):