如何检查发送请求的时间?

时间:2019-05-28 18:01:04

标签: android android-volley

我正在发送Volley StringRequest,并且需要三分钟以上的时间才能收到响应(但是响应状态为OK,并且接收操作方法正确运行)。

是否有任何方法可以检查请求何时已实际发送到服务器(我发现的有关Volley请求的所有答案都在谈论何时收到响应),因此我可以确定这是否只是我的电话甚至在传输之前2分钟,或者如果requestQueue在到达我的请求之前花了很长时间(虽然我只发送一个Volley请求,单击时其优先级设置为IMMEDIATE),处理请求的时间都是2分钟。

服务器端日志显示了在StringRequest之前2-3分钟到达的先前请求(提交Webview表单),但是我不确定延迟是否在cloudflare一方,ELB或其他地方,我想知道是否可以将源设备视为故障而丢弃。

以下代码供参考:

public void sendPostRequest(Map<String,String> params, String option)
{
    RequestQueue MyRequestQueue = Volley.newRequestQueue(this);
    String url="";
    switch (option){
        //...
        case "dniImages": //This is the one
            url  = BuildConfig.REST_DNI_IMAGES_ENDPOINT ;
            break;
    }

    StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            try{
            JSONObject resp = new JSONObject(response);}
            catch(JSONException e){}
        }
    }

    , new com.android.volley.Response.ErrorListener() { 
        @Override
        public void onErrorResponse(VolleyError error) {
            switch (option){
                //...
                case "dniImages":
                    Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }) {
        @Override
        public Priority getPriority() {
            return Priority.IMMEDIATE;
        }

        @Override
        protected com.android.volley.Response<String> parseNetworkResponse(NetworkResponse response) {
            if (response.statusCode == 200) {
                if (option.equals("dniImages"))
                    Toast.makeText(getApplicationContext(), "Error uploading images", Toast.LENGTH_SHORT).show();
            }
            return super.parseNetworkResponse(response);
        }
        protected Map<String, String> getParams() {
            return params;
        }
        @Override
        public Map<String, String> getHeaders(){
            try {
                Map<String, String> headers = super.getHeaders();
                if (headers == null
                        || headers.isEmpty()) {
                    headers = new HashMap<String, String>();
                }
                this.addSessionCookie(headers); 
                return headers;
            }
            catch (AuthFailureError e)
            {
            }
            return new HashMap<String, String>();
        }

        /**
         * Adds session cookie to headers if exists.
         * @param headers
         */
        public final void addSessionCookie(Map<String, String> headers) {
            String cookies = CookieManager.getInstance().getCookie(BuildConfig.TIENDAMIA_URL);
            headers.put("cookie", cookies);
        }

    };
    MyRequestQueue.add(MyStringRequest);
}

1 个答案:

答案 0 :(得分:0)

说实话,我没有与Volley合作,但是最近我们遇到了一些与网络相关的bug,其中一个对我有很大帮助的工具是 Android Profiler。我的意思是看看Network Profiler overview,这真是太神奇了。

  

连接视图:列出在应用程序的所有CPU线程中的时间轴的选定部分中发送或接收的文件。对于每个请求,您可以检查大小,类型,状态和传输持续时间。您可以通过单击任何列标题来对该列表进行排序。您还将看到时间线选定部分的详细分类,显示每个文件的发送或接收时间。