首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Volley multiple requests

Volley multiple requests
EN

Stack Overflow用户
提问于 2017-03-27 15:37:37
回答 1查看 2.7K关注 0票数 1

我的日志显示了来自服务器的响应,但它们都是随机顺序的。此外,在recyclerview中以随机顺序设置响应。这是我对batch和学生的截击和json:

代码语言:javascript
运行
复制
    private void setData() {
        students = new ArrayList<>();   
        StringRequest batchRequest=new StringRequest(Request.Method.POST, BATCH_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    parseBatchJsonResponse(response);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("ResponseError",""+error.toString());

            }
        });
              VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(studentRequest,"req");



    }

    private void parseBatchJsonResponse(String response) throws JSONException {
        Log.d("Resp",""+response);
        JSONObject batchObject=new JSONObject(response);
        JSONArray batchArray=batchObject.getJSONArray("result");
        for (int i=0;i<batchArray.length();i++){
            JSONObject bObject=batchArray.getJSONObject(i);
            batchNos=bObject.getString("batch");
            Log.d("batchNo",""+batchNos);
            getStudentData(batchNos);



        }

    }

    private void getStudentData(String batchNo) {
       batchNos =batchNo= "\"" + batchNo + "\"";

        String studentURl=STUDENT_URL+batchNo.trim();
        Log.d("SURL",""+studentURl);

        StringRequest studentRequest =new StringRequest(Request.Method.GET,studentURl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {
                    Log.d("Student",""+response+batchNos);
                   parseStudentJson(response);


                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
               VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(studentRequest,"req");

    }

    private void parseStudentJson(String batchNo) throws JSONException {
//        students.clear();
        JSONObject studentOb=new JSONObject(batchNo);
        JSONArray stuArray=studentOb.getJSONArray("result");
        for (int i=0;i<stuArray.length();i++){
            JSONObject stu=stuArray.getJSONObject(i);
            String stuName=stu.getString("student");
            students.add(new Student(stuName,100));
            Log.d("BNO",""+batchNos);

        }
        batches.add(new Batch(batchNos,students));
        adapter.notifyDataSetChanged();
EN

回答 1

Stack Overflow用户

发布于 2017-03-27 16:21:15

不要让每次新的请求queue.Make都是一个请求队列。

代码语言:javascript
运行
复制
public class VolleySingleton {
private static VolleySingleton mAppSingletonInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mContext;
private Request.Priority Low;

private VolleySingleton(Context context) {
    mContext = context;
    mRequestQueue = getRequestQueue();

    mImageLoader = new ImageLoader(mRequestQueue,new ImageLoader.ImageCache()
    {
        private final LruCache<String, Bitmap>
                cache = new LruCache<String, Bitmap>(20);

        @Override
        public Bitmap getBitmap(String url) {
            return cache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            cache.put(url, bitmap);
        }
    });
}



public static synchronized VolleySingleton getInstance(Context context) {
    if (mAppSingletonInstance == null) {
        mAppSingletonInstance = new VolleySingleton(context);
    }
    return mAppSingletonInstance;
}



public RequestQueue getRequestQueue() {
    if (mRequestQueue == null) {

        mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
    }
    return mRequestQueue;
}



public <T> void addToRequestQueue(Request<T> req, String tag) {
    req.setTag(tag);
    getRequestQueue().add(req);
}



public ImageLoader getImageLoader() {
    return mImageLoader;
}



public void cancelPendingRequests(Object tag) {
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(tag);
    }
}


}

然后

代码语言:javascript
运行
复制
VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest,tag);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43040458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档