Android Volley Returning results twice for one request

前端 未结 3 506
傲寒
傲寒 2021-01-04 23:38

I have been trying to figure out this issue for two days now and I am completly stumped. For some reason I am sending one request to the queue but volley is returning it tw

3条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-04 23:57

    Okay I faced the issue and came up with a solution. In my custom class i created a global variable on top as you can see in below code

    MyRequest extends StringRequest {
        private boolean mDelivered;  //boolean to deliver response only once
    

    then in constructor i initialsed it

        public MyRequest(String url, Listener listener,
                          ErrorListener errorListener, Context ctx) {
        super(url, listener, errorListener);
        mContext = ctx.getApplicationContext();
        mDelivered = false;
        DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(5000, 1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        setRetryPolicy(retryPolicy);
    }
    

    and finally i overrided deliverResponse method. For first time mDelivered will be false and once it's delivered it'll be true. if response delivered from cache then cancel network request

        @Override
    protected void deliverResponse(String response) {
        if (!mDelivered) {
            mDelivered  = true;
            cancel();   //if cache delivers response better to cancel scheduled network request
            super.deliverResponse(response);
        }
    }
    

    Hope this helps

提交回复
热议问题