【问题标题】:android http request execution is slow randomlyandroid http请求执行随机缓慢
【发布时间】:2014-09-27 17:22:16
【问题描述】:

我正在使用以下代码从服务器获取一些数据:(它发生在按钮 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 来获取它,它很快,将 url 粘贴到我的浏览器中,它很快。

【问题讨论】:

  • 尝试设置连接超时
  • 可能取决于网速。
  • 听起来像是连接或服务器问题。
  • @userM1433372 我不会将其称为服务器问题,因为它在其他情况下工作正常。无论如何,我打电话给我的 ISP 并告知他们连接速度很慢,他们做了一些事情,现在它似乎工作正常,正如预期的那样......无论如何感谢您的回复

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


【解决方案1】:

如果您怀疑服务器端,您可以从等式中删除 android 堆栈并直接在 curl 中进行测试,使用开关 -V 和“时间”来测量尽可能多的东西。

当您直接调查服务器并且不再怀疑服务器端时,您将返回您的 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

【讨论】:

  • 感谢您的回复,我已经用 curl 测试过,这样没有问题,所以我的服务器端不在桌面上,但另一件事是我的工作场所的 wifi 网络混乱,笔记本电脑是通过电缆连接的,所以我认为这就是问题所在。我明天会调查一下。不过还是谢谢
猜你喜欢
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 2018-10-07
  • 2014-04-21
相关资源
最近更新 更多