等待Async Volley请求的结果并将其返回
下面是一个方法,我试图通过调用getSelf()来检索用户对象。 问题是结果始终为null,因为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() { @Override public void onResponse(JSONObject response) { String result; try { result = response.getString("result"); Gson gson = new Gson(); java.lang.reflect.Type listType = new TypeToken() {}.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; }
对于那些从搜索和谷歌来到这个问题的人。
没有理由等待异步请求完成,因为它是异步设计。 如果你想使用Volley实现同步行为,你必须使用所谓的期货 :
String url = "http://www.google.com/humans.txt"; RequestFuture future = RequestFuture.newFuture(); StringRequest request = new StringRequest(Request.Method.GET, url, future, future) mRequestQueue.add(request); String result = future.get(); // this line will block
请记住,您必须在另一个线程中运行阻塞代码,因此将其包装到AsyncTask
(否则future.get()
将永远阻塞)。
您可以使用VolleyPlus库https://github.com/DWorkS/VolleyPlus实现此目的
它有一个名为VolleyTickle和RequestTickle的东西。 请求是一样的。 它是同步请求,并且只有一个请求。
- java.lang.NullPointerException:尝试调用虚方法’java.lang.String android.net.Uri.getScheme()’
- 在`Service`类中运行新的`runnableThread`时出现java.lang.ClassCastException
- Android中的Twitter共享的xAuth身份validation?
- 苔丝二OCR无法正常工作
- 问题序列化和反序列化ArrayList
- commandinfokationfailure,有谁知道如何修复这个bug?
- 如何重置ImageView的位置?
- 如何在Android上使用Google的中文字符文字转语音服务?
- 最新的Google搜索更新后,RecognizerIntent会出错