Читать с URL java - PullRequest
       0

Читать с URL java

6 голосов
/ 08 июня 2011

Я пытаюсь прочитать URL в Java, и он работает, пока URL загружается в браузере.

Но если он просто зацикливается в браузере и не загружает эту страницу, когда я пытаюсь открыть ее в своем браузере, мое java-приложение просто зависает, оно, вероятно, будет ждать вечно, если будет достаточно времени. Как мне установить тайм-аут на это или что-то, если его загрузка длится более 20 секунд, что я останавливаю свое приложение?

Я использую URL

Вот соответствующая часть кода:

    URL url = null;
    String inputLine;

    try {
        url = new URL(surl);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    BufferedReader in;
    try {
        in = new BufferedReader(new InputStreamReader(url.openStream()));
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
        }
        in.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

Ответы [ 4 ]

10 голосов
/ 08 июня 2011

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

    URL url = new URL(urlPath);
    URLConnection con = url.openConnection();
    con.setConnectTimeout(connectTimeout);
    con.setReadTimeout(readTimeout);
    InputStream in = con.getInputStream();
2 голосов
/ 08 июня 2011

Метод URL # openStream на самом деле является просто ярлыком для openConnection().getInputStream().Вот код из класса URL:

public final InputStream openStream() throws java.io.IOException {
  return openConnection().getInputStream();
}
  • Вы можете настроить параметры в коде клиента следующим образом:

    URLConnection conn = url.openConnection();
    // setting timeouts
    conn.setConnectTimeout(connectTimeoutinMilliseconds);
    conn.setReadTimeout(readTimeoutinMilliseconds);
    InputStream in = conn.getInputStream();
    

Ссылка: URLConnection # setReadTimeout , URLConnection # setConnectTimeout

  • В качестве альтернативы, вы должны установить системное свойство sun.net.client.defaultConnectTimeout и sun.net.client.defaultReadTimeout в разумное значение.
1 голос
/ 08 июня 2011

Если вы используете URLConnection (или HttpURLConnection) для «чтения с URL», у вас есть метод setReadTimeout(), который позволяет вам контролировать это.

Отредактировано после публикации кода:

URL url = null;
String inputLine;

try {
    url = new URL(surl);
} catch (MalformedURLException e) {
    e.printStackTrace();
}
BufferedReader in;
try {
    URLConnection con = url.openConnection();
    con.setReadTimeout( 1000 ); //1 second
    in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }
    in.close();

} catch (IOException e) {
    e.printStackTrace();
}
0 голосов
/ 19 апреля 2019

Вы должны добавить интернет-разрешение в AndroidMenifest.xml

<uses-permission android:name="android.permission.INTERNET" />

и добавьте его в функцию main :

if (android.os.Build.VERSION.SDK_INT > 9)
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...