HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//3.与互联网(服务器)之间的连接搭好后,进行连接设置
//3.1 设置请求方式,这里我们设置成get
connection.setRequestMethod("GET");
//3.2设置请求服务器超时的时间,单位是毫秒
connection.setConnectTimeout(5000);
//下面的设置注掉是因为这些不是必需设置的。
//3.3设置读取的超时时间,单位是毫秒
//connection.setReadTimeout(60000);
//3.4设置其他请求参数
//connection.setRequestProperty();
//3.5 接收服务器返回的结果码
int code = connection.getResponseCode();
if (code == 200){
      try {
            InputStream in = connection.getInputStream();

            Scanner scanner = new Scanner(in);
            scanner.useDelimiter("\\A");

            boolean hasInput = scanner.hasNext();
            if (hasInput) {
                return scanner.next();
            } else {
                return null;
            }
        } finally {
            connection.disconnect();
        }
 }

我们可以这里设置请求方法或者添加头字段,更改连接的属性。然后从openConnection 获得一个输入流,接下来我们需读取这个输入流的内容,在java中有很多进行读取的方法,但是我们选择使用扫描器,用它来令牌化流,因为这样更简单快速。

通过将分隔符设置为\A,即从流起点开始,我们强制扫描器将流的整个内容读入,下一个令牌流,这并不光明正大,但是它可自动为我们做一些事情。

它可以缓冲数据,这意味着它不仅以小块从网络中提取数据,而且由于http不需要向我们提供内容大小,我们的代码要准备好处理不同大小的缓冲区,而此代码能够根据需要自动分配和释放缓冲区,它还能帮我们处理字符编程,特别是它能将UTF-8(json和JavaScript的默认编程)转换成UTF-16(Android使用的格式)。

还有很多其他方式可以做到这一点,我们添加了一个栈溢出链接,你可以阅读了解它们,。

http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string

我们把它附在下面:

public String convertStreamToString(InputStream is) { 
    StringWriter writer = new StringWriter();
    IOUtils.copy(inputStream, writer, encoding);
    String theString = writer.toString();
    //或者
    //String theString = IOUtils.toString(inputStream, encoding); 
}

摘自:android重新学_网络1——采用HttpURLConnection获取网络图片

results matching ""

    No results matching ""