【发布时间】:2023-04-05 17:19:01
【问题描述】:
下面是我试图通过调用 getSelf() 来检索用户对象的方法。问题是结果始终为空,因为 Volley 请求在返回结果时尚未完成。我对异步进程有点陌生,所以我不确定让方法等待 API 调用结果返回 UserBean 对象的最佳方法。谁能帮帮我?
public UserBean getSelf(String url){
RpcJSONObject jsonRequest = new RpcJSONObject("getSelf", new JSONArray());
JsonObjectRequest userRequest = new JsonObjectRequest(Request.Method.POST, url, jsonRequest,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String result;
try {
result = response.getString("result");
Gson gson = new Gson();
java.lang.reflect.Type listType = new TypeToken<UserBean>() {}.getType();
//HOW DO I RETURN THIS VALUE VIA THE PARENT METHOD??
userBean = (UserBean) gson.fromJson(result, listType);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error:", error.toString());
finish();
}
}
);
this.queue.add(userRequest);
return userBean;
}
【问题讨论】:
-
你不应该做你想做的事。异步处理的原因是你在做“慢”的事情时不会阻塞程序或 UI。所以你的
onResponse应该通知调用者该对象可用,然后显示它。如果您需要用户等待,请弹出一个进度对话框,然后在结果可用时将其关闭。 -
还要检查您的回复。可能是
null。
标签: java android asynchronous anonymous-function android-volley