Выполнение http-запроса Android происходит медленно в случайном порядке

Я использую приведенный ниже код для получения некоторых данных с сервера: (это происходит при нажатии кнопки)

@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;
}

проблема в том, что 8 из 10 попыток выдает следующее исключение:

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

и в большинстве случаев для получения данных требуется много времени, но иногда это происходит быстро, как молния, данные невелики, вот данные, которые должны быть получены в данный момент:

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

поэтому мой вопрос: почему иногда он может получать данные с разумной скоростью, а иногда выдает исключение, может быть скорость сети? потому что на моем рабочем месте была ужасная сеть, я также пробовал дома, и результат был лучше, но исключение все равно возникало время от времени.

Дополнительная информация: я использовал curl, чтобы получить его, и это было быстро, вставьте URL-адрес в свой браузер, и это было быстро.


person arash moeen    schedule 05.08.2014    source источник
comment
попробуйте установить тайм-аут соединения   -  person KOTIOS    schedule 05.08.2014
comment
Наверное зависит от скорости интернета.   -  person Aniruddha    schedule 05.08.2014
comment
Похоже на проблемы с подключением или сервером.   -  person userM1433372    schedule 05.08.2014
comment
@userM1433372 userM1433372 Я бы не назвал это проблемой сервера, так как в других ситуациях он работает нормально. в любом случае, я позвонил своему интернет-провайдеру и сообщил им о низкой скорости соединения, и они кое-что сделали, и теперь, похоже, все работает нормально, как и ожидалось ... в любом случае спасибо за ваши ответы.   -  person arash moeen    schedule 05.08.2014


Ответы (1)


если вы подозреваете серверную сторону, вы можете просто удалить стек Android из уравнения и протестировать непосредственно в curl, используя переключатели -V и «время», чтобы измерить столько вещей, сколько вы хотите.

когда вы исследовали сервер напрямую и больше не подозреваете серверную часть, вы возвращаетесь к своему стеку Android.

пример POST на конечной точке REST:

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
person Robert Rowntree    schedule 05.08.2014
comment
Спасибо за ваш ответ, я уже тестировал curl, и это не было проблемой, поэтому я не работал на стороне сервера, но другое дело, что на моем рабочем месте была перепутанная сеть Wi-Fi, ноутбук подключен через кабель, поэтому я предполагаю Это проблема. Я посмотрю на это завтра. но все равно спасибо - person arash moeen; 05.08.2014