排球,等待回复等到使用标志
我必须回应截击请求的结果。 但因为它是异步的。 在继续之前我需要等待结果。 如果我不这样做,我会得到nullobjects。
如何设置标志并等待标志关闭。
categoryslashid = new JSONObject[Category_IDs.size()];//size of the list containing all categories taskfinished = new boolean[Category_IDs.size()]; //boolean is initialized to false //Request to category/{id} to get for(int i= 0;i<Category_IDs.size();i++) { makevolleyrequesforCategorySlashID(Const.URL_FULL_STOREURL+Const.URL_PRODUCT_GET_CATEGORY_ID,i); } public void makevolleyrequesforCategorySlashID(URL,id) { //volley implementation public void onResponseoverride { categoryslashid[i]=response; taskfinished[i]=true; } }
现在我必须在完成所有布尔任务完成后才能继续。
public boolean areAllTrue() { for(boolean b : taskfinished) if(!b) return false; return true; }
实现一个接口,并在数据准备好后使用它来回调。 像这样的东西:
public interface OnDownloadTaskCompleted { public void onTaskCompleted(List list, boolean error, String message); }
然后你应该将这个实例传递给你的请求并覆盖onTaskCompleted()
private void downloadData(){ final DownloadUsingVolley downloader = new DownloadUsingVolley(getActivity()); downloader.retrieveData(new OnDownloadTaskCompleted() { @Override public void onTaskCompleted(List list, boolean error, String message) { //do something with your data } }); }
我假设你有一个类,你实现了凌空的东西(DownloadusingVolley),一个方法调用它并自己发出请求(retrieveData)。
retrieveData可以像这样实现:
private void retrieveData(String url, final OnDownloadTaskCompleted taskCompleted){ final JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener(){ @Override public void onResponse(JSONObject response) { try { //parse taskCompleted.onTaskCompleted(result,false,null); }catch (JSONException e){ taskCompleted.onTaskCompleted(0,true,e.getMessage()); } } },new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError volleyError) { taskCompleted.onTaskCompleted(0,true,volleyError.getMessage()); } }); //adding request into the queue ApplicationClass.getInstance().addToRequestQueue(request,"aTag"); }
在这里你可以找到一个很好的关于排球的教程: 使用Volley的Android中的异步HTTP请求