java - Android:通过 URL.getContent() 从互联网获取数据 - 不需要 HttpUrlConnection?

标签 java android httpurlconnection

到目前为止,我已经了解到如果我需要在 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() 就可以很简单地获取数据,为什么我应该使用任何类型的连接?

最佳答案

it's not necessary to use HttpURLConnection.class and getConnection() method?

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

why Android documentation recommend me to use it?

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

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

  1. 它是未记录的并且不是类型安全的,这意味着该行为可能会根据设备制造商的心血来潮在任何设备上发生变化。

  2. 关于 getContent() 的 HTTP 错误处理也没有记录。当服务器返回 404 时会发生什么? 401? 500? 301? 304?其中一些您需要显式处理(例如,使用指数退避重试),这意味着您需要获取响应代码。至少,您需要知道请求是否成功,因此您从 getContent() 获得的 whatever-the-object-is 是否有效。您的方法似乎对此没有太大帮助。

  3. 同样,您的方法会忽略 HTTP header (请求或响应),例如与缓存相关的 header (Last-ModifiedETagExpires ).

关于java - Android:通过 URL.getContent() 从互联网获取数据 - 不需要 HttpUrlConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533902/

相关文章:

java - 从后台线程的 catch block 更新表状态

java - 在 Java 中创建/建立方法之间的关系

java - 如何在 Java 中将一个 Swing 组件的图形图像复制到另一个 Swing 组件

android - 使用 url 查看图像时将 header 传递给 Picasso - Android

java - URL 连接 : how to get body returned with status ! = 200?

java - 在Java中解析管道分隔的字符串(管道可以转义)

android - 在 ListView 中动态添加 View (在本例中为线性布局)时出现图形错误

android - 带有前缀的 TextInputLayout 中的 EditText

android - 使用 HttpUrlConnection 向服务器发送请求

Android、HttpURLConnection 和处理错误的凭据