Android凌空响应不止一次收到

时间:2017-05-27 08:45:31

标签: android android-volley

我正在使用Volley从服务器获取数据。有时,当网络连接速度很慢时,我会得到两次或三次或更多的响应。我按照Android volley sending data twice中类似问题的答案。但仍然我遇到了同样的问题.Below是我的代码。请帮助我

代码:

 public void volley_get_list() {
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
            StringRequest stringRequest = new StringRequest(Request.Method.POST, srch_lst_url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response)
                {
                    Log.e("Response", response);
                    if(!broadcast_unregister) {
                        getActivity().unregisterReceiver(broadcastReceiver);
                        Log.e("BroadcastReceiver", "Unregistered");

                        broadcast_unregister=true;
                    }
                        }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                error.printStackTrace();

                }
            }) {
                @Override
                protected Map<String, String> getParams() {
                    HashMap<String,String> hashMap = new HashMap<>();
                    hashMap.put("search", typed_text);
                    hashMap.put("latt", lat);
                    hashMap.put("long", longt);

                    return hashMap;
                }
            };
     RetryPolicy retryPolicy=new DefaultRetryPolicy(0,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
            stringRequest.setRetryPolicy(retryPolicy);
            stringRequest.setShouldCache(false);
            requestQueue.add(stringRequest);
            requestQueue.start();
       }        

2 个答案:

答案 0 :(得分:0)

我希望,如果您删除此代码,它应该有效(requestQueue.start();),因为添加到请求队列本身会使api命中。

希望这有用:)

答案 1 :(得分:0)

您正在将重试超时时间设置为0秒,这意味着它会在第一次尝试后非常非常快地开始重试尝试,如果您执行此操作时出现错误,我也不会感到惊讶。

https://android.googlesource.com/platform/frameworks/volley/+/idea133/src/com/android/volley/DefaultRetryPolicy.java#58

int timeout = TimeUnit.SECONDS.toMillis(3);
int maxRetries = DefaultRetryPolicy.DEFAULT_MAX_RETRIES;
int backoffMultiplier = DefaultRetryPolicy.DEFAULT_BACKOFF_MULT;
RetryPolicy retryPolicy = new DefaultRetryPolicy(timeout, maxRetries, backoffMultiplier);

尝试3秒而不是(3000毫秒)