Тайм-аут подключения HttpURLConnection не работает

Я установил тайм-аут соединения и таймаут чтения, но они все равно игнорируются, запрос остается навсегда. Как мне установить тайм-аут, чтобы запрос отменялся по истечении тайм-аута? Это мой фрагмент кода, ценю вашу помощь.

        urlConnection = (HttpURLConnection) saveURL.openConnection();
        // is output buffer writer
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type", "text/html");
        urlConnection.setRequestProperty("userid", id);

        urlConnection.setConnectTimeout(3000);
        urlConnection.setReadTimeout(3000);
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setUseCaches(false);

        Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8"));
        writer.write(jsonString);
        writer.flush();
        // json data
        writer.close();

        is = new BufferedInputStream(urlConnection.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String inputLine = "";
        while ((inputLine = br.readLine()) != null) {
            sb.append(inputLine);
        }

        int responseCode = urlConnection.getResponseCode();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SocketTimeoutException soce) {
        // TODO Auto-generated catch block
        soce.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {

        try {
            if (null != urlConnection)
                urlConnection.disconnect();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

person Krishnan V S    schedule 05.03.2016    source источник
comment
как узнать, что он не работает?   -  person Joe Maher    schedule 05.03.2016
comment
Потому что я установил тайм-аут 10 секунд и рассчитал его. Это продолжалось более 2 минут и, наконец, удалось. Но проблема в том, что я видел, как это продолжалось более 5 минут и все еще не истекло. Мне нужно аккуратно обработать тайм-аут, чтобы пользователь мог попытаться загрузить в другой раз, когда чистая скорость будет лучше.   -  person Krishnan V S    schedule 05.03.2016
comment
Я просто имел в виду, что ты, кажется, ничего не возвращаешь, чтобы пройти?   -  person Joe Maher    schedule 05.03.2016
comment
Я использую поток возврата, который я прочитал из URL-адреса, эта строка кода здесь не была показана, вот и все.   -  person Krishnan V S    schedule 05.03.2016
comment
Это может означать, что это не просьба, которая требует времени, а что-то еще   -  person Joe Maher    schedule 05.03.2016
comment
Размер jsonString, который я пытаюсь загрузить, на самом деле составляет около 2-4 МБ, поэтому я почти уверен, что на это уходит время. Я хочу сделать тайм-аут и разрешить пользователю возможность повторной попытки вместо того, чтобы пытаться слишком долго.   -  person Krishnan V S    schedule 05.03.2016
comment
Что ж, сразу это ваша проблема, это массивная строка json, и ее обработка займет гораздо больше времени, чем загрузка   -  person Joe Maher    schedule 05.03.2016
comment
Именно поэтому я хочу, чтобы тайм-аут был реализован при более медленном сетевом соединении.   -  person Krishnan V S    schedule 05.03.2016
comment
но это не имеет ничего общего с подключением к Интернету, вы обрабатываете много json   -  person Joe Maher    schedule 05.03.2016
comment
Извините, если я не прояснил контекст, мне нужен тайм-аут, чтобы отменить загрузку большого jsonString, если он превышает определенную продолжительность.   -  person Krishnan V S    schedule 05.03.2016
comment
и это то, что я говорю, время занимает не сетевая загрузка строки, а создание объекта json. Вы никогда не должны создавать клиентскую сторону строки json размером 2-4 МБ для загрузки, это кажется очень неправильным   -  person Joe Maher    schedule 05.03.2016
comment
Не совсем, создание выполняется отдельным методом, это занимает всего секунду, я рассчитал время. Это загрузка, которая требует времени при медленном соединении.   -  person Krishnan V S    schedule 05.03.2016


Ответы (1)


Я не уверен, что это лучший вариант, я установил таймер, который использовал для отключения HttpURLConnection, когда время истекло. Вроде пока работает нормально. Если кто-то может указать на недостатки этого подхода и предложить лучший способ, я был бы признателен.

person Krishnan V S    schedule 05.03.2016