打开与网站的连接然后随后阅读该网页上的信息的首选方法是什么?关于不同部分似乎有许多具体问题,但没有明确和简单的例子。
答案 0 :(得分:5)
Getting Text from a URL | Example Depot:
try {
// Create a URL for the desired page
URL url = new URL("http://hostname:80/index.html");
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
// str is one line of text; readLine() strips the newline character(s)
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
说到“写”到网址,我想你会想要Sending a POST Request Using a URL | Example Depot之类的东西。
答案 1 :(得分:1)
Sun Microsystems实际上对此主题有一个tutorial on reading and writing with a URLConnection,这将是一个很好的起点。
答案 2 :(得分:1)
你可以简单地使用它:
InputStream stream = new URL( "http://google.com" ).openStream();
答案 3 :(得分:-3)
由SB链接的Sun Microsystems article将是一个很好的起点。但是,我绝对不会称之为首选方式。首先,它不必要地抛出异常,然后它不会关闭最终的流。此外,它使用我不同意的url.openStream方法,因为即使HTTP error is returned它仍然可以接收输出。
而不是url.openStream
我们写道:
HttpURLConnection conn=(HttpURLConnection) url.openConnection()
//Any response code starting with 2 is acceptable
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
//Provide a nice useful exception
throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
InputStream rawIn=conn.getInputStream()
OutputStream rawOut=conn.getOutputStream()
//You may want to add buffering to reduce the number of packets sent
BufferedInputStream bufIn=new BufferedInputStream(rawIn);
BufferedOutputStream bufOut=new BufferedInputStream(rawOut);
请勿在没有处理异常或关闭流的情况下使用此代码!。这实际上很难做到正确。如果您想了解如何正确执行此操作,请查看my answer更具体的fetching images in Android问题,因为我不想在此重写所有问题。
现在,当从服务器检索输入时,除非您正在编写命令行工具,否则您将希望在单独的线程中运行它并显示加载对话框。 Sgarman's answer使用基本的Java线程演示了这一点,而an answer使用Android的AsyncTask类来解决这个问题,使其更加整洁。 class file没有任何Android依赖项,许可证是Apache,因此您可以在非Android项目中使用它。