android http请求执行速度随机慢

时间:2014-08-05 06:09:35

标签: android httprequest apache-httpclient-4.x androidhttpclient

我正在使用以下代码从服务器获取一些数据:(它发生在按钮onclick上)

@Override
protected ArrayList<Category> doInBackground(String... arg0) {
    ArrayList<Category> result = new ArrayList<Category>();
    JSONArray array = new JSONArray();
    BufferedReader in = null;
    try
    {
        HttpParams params = new BasicHttpParams();
        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        HttpClient httpclient = new DefaultHttpClient(params);
        HttpGet request = new HttpGet();
        URI website = new URI(_URL);
        request.setURI(website);
        HttpResponse response = httpclient.execute(request);
        in = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent()));
        String data = in.readLine();
        array = new JSONArray(data);
        for(int i = 0;i < array.length();i++)
        {
            JSONObject object = array.getJSONObject(i);
            Category category = new Category(object.getInt("Id"), object.getString("Name"));
            result.add(category);
        }
    }
    catch(Throwable t)
    {
        Log.e("Error getting categories", t.getMessage());
    }
    return result;
}

问题是10次尝试中有8次,它会引发以下异常:

org.apache.http.conn.HttpHostConnectException: Connection to http://kiagallery.ir refused

并且大多数时候需要很长时间才能获取数据,但有时候它很快就像闪电一样,数据不大,这里的数据应该是当前提取的数据:

[{"Id":44,"Name":"Collection 101"},{"Id":45,"Name":"local 01"}]

所以我的问题是,为什么它有时会以合理的速度获取数据,有时它会引发异常,可能是网络速度?因为我的工作场所有一个糟糕的网络,我也在家尝试,结果更好,但异常仍然偶尔发生

其他信息:我使用curl来获取它并且速度很快,将网址粘贴到我的浏览器中它很快。

1 个答案:

答案 0 :(得分:0)

如果你怀疑服务器端,你可以从等式中删除android堆栈并直接在curl中测试,使用开关-V和&#39; time&#39;测量你想要的东西。

当您直接调查服务器并且不再怀疑服务器端时,您将返回到您的Android堆栈。

REST端点上的POST示例:

curl -X POST  -H "X-Parse-Application-Id: ovv"  -H "X-Parse-REST-API-Key: heoj"  -H "X-Parse-Session-Token: i9ds" -H "Content-Type: application/json" --data @media1.json https://api.parse.com/1/classes/MediaItem