到目前为止,我已经了解到如果我需要在 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()
:
它是未记录的并且不是类型安全的,这意味着该行为可能会根据设备制造商的心血来潮在任何设备上发生变化。
关于
getContent()
的 HTTP 错误处理也没有记录。当服务器返回 404 时会发生什么? 401? 500? 301? 304?其中一些您需要显式处理(例如,使用指数退避重试),这意味着您需要获取响应代码。至少,您需要知道请求是否成功,因此您从getContent()
获得的 whatever-the-object-is 是否有效。您的方法似乎对此没有太大帮助。同样,您的方法会忽略 HTTP header (请求或响应),例如与缓存相关的 header (
Last-Modified
、ETag
、Expires
).
关于java - Android:通过 URL.getContent() 从互联网获取数据 - 不需要 HttpUrlConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533902/