到目前为止,我已经了解了是否需要实现方法来从Android应用程序中的Internet服务器检索数据,最好使用Java的HttpUrlConnection,如下所示:

URL url = "http:\\www.stackoverflow.com/questions/json";
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
try {
     InputStream in = new BufferedInputStream(connection.getInputStream());
     readStream(in);
   } finally {
     connection.disconnect();
   }


但是在这里YouTube,一个人告诉我们很热,只需调用以下代码即可检索位图:

InputStream in = (InputStream) url.getContent();


我想指出的是,这里我们从url获得内容,而没有调用HttpURLConnection.class和openConnection()方法。

我按照该教程进行操作,并编译了代码。
1)我会错过什么吗,还是没有必要使用HttpURLConnection.class和openConnection()方法?
2)如果没有必要,为什么Android文档推荐我使用它?

是的,我知道,除了HttpURLConnection之外,还可以使用其他包(库),这个问题不是问题。我要问的是,如果仅通过调用URL.getContent()来获取数据就这么简单,为什么我应该使用任何类型的连接?

最佳答案

不需要使用HttpURLConnection.class和getConnection()方法吗?


没有getConnection()方法。有openConnection()。如the documentation for getContent() on openConnection()中所述,HTTP / HTTPS URL上的getContent()将使用URL作为其处理的一部分。


  为什么Android文档推荐我使用它?


除了该文档的作者以外,没有其他人可以告诉您为什么他们编写该文档。该文档的作者不太可能回答您的问题。

就个人而言,出于以下几个原因,我建议不要使用getContent()


它没有文档记录,也不是类型安全的,这意味着行为可能会在设备制造商心血来潮的任何设备上更改。
关于getContent()的HTTP错误处理也未记录。服务器返回404会发生什么? 401? 500? 301? 304?其中一些您将需要显式处理(例如,以指数退避重试),这意味着您需要获取响应代码。至少,您需要知道请求是否成功,因此您从getContent()中获取的任何对象是否有效。您的方法似乎对此没有太大作用。
同样,您的方法会忽略HTTP标头(请求或响应),例如与缓存有关的标头(Last-ModifiedETagExpires)。

10-08 00:57