从URL java读取
我正在尝试用java读取URL,只要URL在浏览器中加载,它就可以工作 但是如果它只是在浏览器中循环,并且在我试图在浏览器中打开页面时没有加载该页面,我的java应用程序就会挂起,如果有足够的时间,它可能会永远等待。如果加载超过20秒导致我停止应用程序,我如何设置超时 我正在使用 以下是守则的相关部分:从URL java读取,java,url,timeout,Java,Url,Timeout,我正在尝试用java读取URL,只要URL在浏览器中加载,它就可以工作 但是如果它只是在浏览器中循环,并且在我试图在浏览器中打开页面时没有加载该页面,我的java应用程序就会挂起,如果有足够的时间,它可能会永远等待。如果加载超过20秒导致我停止应用程序,我如何设置超时 我正在使用 以下是守则的相关部分: URL url = null; String inputLine; try { url = new URL(surl); } catch (Ma
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();
}
如果您正在使用
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();
}
该方法实际上只是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();
- 或者,您应该将
和sun.net.client.defaultConnectTimeout
设置为合理的值sun.net.client.defaultReadTimeout
- 我不知道你是如何使用URL类的。如果发布一个片段会更好。但有一种方法对我来说很有效。看看它对你的情况是否有帮助:
URL url = new URL(urlPath);
URLConnection con = url.openConnection();
con.setConnectTimeout(connectTimeout);
con.setReadTimeout(readTimeout);
InputStream in = con.getInputStream();
您应该在AndroidMenifest.xml中添加internet权限
介意发布一些相关的代码吗?我猜你可以使用
URL
然后调用openConnection()
,返回URLConnection
?好的,我刚刚添加了修改过的代码——我相信你可以通过BufferedReader发现这两行新代码和行中的变化
<uses-permission android:name="android.permission.INTERNET" />
if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}