Android截取JsonObjectRequest花费的时间太长

Android截取JsonObjectRequest花费的时间太长,android,performance,http-post,android-volley,Android,Performance,Http Post,Android Volley,我现在搜索了几天,想弄明白为什么我的POST请求需要这么长时间才能加载。我使用的是截击库而不是HTTPRequest 以下是我处理请求的方式: RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); ... JSONObject jsonObject = new JSONObject(); jsonObject.put("geoLong", longitude); jsonObject.put(

我现在搜索了几天,想弄明白为什么我的POST请求需要这么长时间才能加载。我使用的是截击库而不是HTTPRequest

以下是我处理请求的方式:

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

...

JSONObject jsonObject = new JSONObject();
jsonObject.put("geoLong", longitude);
jsonObject.put("geoLat", latitude);
jsonObject.put("radius", 5);
JsonObjectRequest jsonRequest = new   JsonObjectRequest(Request.Method.POST, URL,
    jsonObject, createResponseListener(), createErrorListener());
jsonRequest.setShouldCache(false);
jsonRequest.setRetryPolicy(new DefaultRetryPolicy(15000, 2, 1));
jsonRequest.setTag(requestTag);
requestQueue.add(jsonRequest);
加载请求大约需要10-15秒,直到我收到响应,这太荒谬了,因为响应大小约为1886字节。我用良好的WLAN连接和3G对它进行了测试


如果我通过WLAN在我的笔记本电脑上与邮递员进行请求,只需要大约400毫秒,因此这不是服务器端问题。我很困惑,为什么要花这么长时间才提出这个截击请求,我做错了什么吗?

通常截击不会花更多的时间。 你可以自己检查

private long mRequestStartTime;

public void performRequest()
{
    mRequestStartTime = System.currentTimeMillis(); // set the request start time just before you send the request.

    JsonObjectRequest request = new JsonObjectRequest(URL, PARAMS, 
        new Response.Listener<JSONObject>() 
        {
            @Override
            public void onResponse(JSONObject response) 
            {
                // calculate the duration in milliseconds
                long totalRequestTime = System.currentTimeMillis() - mRequestStartTime;
            }
        },
        new Response.ErrorListener() 
        {
            @Override
            public void onErrorResponse(VolleyError error) 
            {
                long totalRequestTime = System.currentTimeMillis() - mRequestStartTime;
            }
        });

    requestQueue.add(request);
} 
private long mRequestStartTime;
公共无效性能请求()
{
mRequestStartTime=System.currentTimeMillis();//在发送请求之前设置请求开始时间。
JsonObjectRequest=新的JsonObjectRequest(URL、参数、,
新的Response.Listener()
{
@凌驾
公共void onResponse(JSONObject响应)
{
//以毫秒为单位计算持续时间
long totalRequestTime=System.currentTimeMillis()-mRequestStartTime;
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误)
{
long totalRequestTime=System.currentTimeMillis()-mRequestStartTime;
}
});
添加(请求);
} 

若你们仍然面临这个问题,那个么你们可以进行改装:

通常截击不会花费更多的时间。 你可以自己检查

private long mRequestStartTime;

public void performRequest()
{
    mRequestStartTime = System.currentTimeMillis(); // set the request start time just before you send the request.

    JsonObjectRequest request = new JsonObjectRequest(URL, PARAMS, 
        new Response.Listener<JSONObject>() 
        {
            @Override
            public void onResponse(JSONObject response) 
            {
                // calculate the duration in milliseconds
                long totalRequestTime = System.currentTimeMillis() - mRequestStartTime;
            }
        },
        new Response.ErrorListener() 
        {
            @Override
            public void onErrorResponse(VolleyError error) 
            {
                long totalRequestTime = System.currentTimeMillis() - mRequestStartTime;
            }
        });

    requestQueue.add(request);
} 
private long mRequestStartTime;
公共无效性能请求()
{
mRequestStartTime=System.currentTimeMillis();//在发送请求之前设置请求开始时间。
JsonObjectRequest=新的JsonObjectRequest(URL、参数、,
新的Response.Listener()
{
@凌驾
公共void onResponse(JSONObject响应)
{
//以毫秒为单位计算持续时间
long totalRequestTime=System.currentTimeMillis()-mRequestStartTime;
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误)
{
long totalRequestTime=System.currentTimeMillis()-mRequestStartTime;
}
});
添加(请求);
} 

如果您仍然面临问题,则可以进行改装:

您如何测量时间?我在这里看不到有这样的情况。我不测量电话上的时间,这只是我的评估。那么你怎么知道需要那么长时间?您如何知道问题不在显示代码中?还是在其他十几个地方?或者甚至存在问题?这是在调试器中还是不在调试器中?我注意到一些Gson序列化在调试器上运行时会花费很长时间,并且在没有调试器的情况下会非常快。也许您应该尝试返回一个字符串,以便查看是请求还是json转换器占用了时间@Gabetechan有一个正确的想法,您需要更好地检测代码以确定问题。您如何测量时间?我在这里看不到有这样的情况。我不测量电话上的时间,这只是我的评估。那么你怎么知道需要那么长时间?您如何知道问题不在显示代码中?还是在其他十几个地方?或者甚至存在问题?这是在调试器中还是不在调试器中?我注意到一些Gson序列化在调试器上运行时会花费很长时间,并且在没有调试器的情况下会非常快。也许您应该尝试返回一个字符串,以便查看是请求还是json转换器占用了时间@Gabetechan有一个正确的想法,您需要更好地插入代码以确定问题。我按照您所说的测量了时间,问题是json解析。谢谢你的帮助!正如你所说,我测量了时间,问题是json解析。谢谢你的帮助!