当前位置: 首页 > 知识库问答 >
问题:

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

越勇
2023-03-14

到目前为止,我已经了解到如果我需要在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。类和openConnection()方法
2)如果没有必要,为什么Android文档建议我使用它?

是的,我知道,除了HttpURLConnection可能使用其他包(库),这个问题不是关于它的。我想问的是,如果只需调用URL.getContent()就能轻松获取数据,为什么我应该使用任何类型的连接?

共有2个答案

邵弘伟
2023-03-14

当然,他使用了 HttpURLConnection,但他使用了 connection.getContent() 来重新运行 Object 实例,而不是 connection.getInputStream()。

截止到文档;< code>getContent()已经在内部使用< code>getInputStream()来检索内容,并使用< code>getContentType()来加载适当的类(如< code>JSON)。

我建议您使用< code>getInputStream(),因为它允许您处理错误、不同类型的响应代码,并决定将哪个类用于该数据类型。

URL还有一个名为getContent()的方法,它是connection.getContnet()的简写;

祝允晨
2023-03-14

没有必要使用HttpURLConnection.class和getConntions()方法?

没有getConnection()方法。有openConnection() getContent()将使用 openConnection()作为其处理的一部分,如 URL上的

为什么Android留档推荐我使用?

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

就我个人而言,我建议不要使用< code>getContent(),原因如下:

>

  • 它没有文档记录且不是类型安全的,这意味着该行为可能会根据设备制造商的心血来潮在任何设备上更改。

    关于< code>getContent()的HTTP错误处理也没有记录。当服务器返回404时会发生什么?一个401?一辆500?一个301?一个304?其中一些您需要显式处理(例如,使用指数补偿重试),这意味着您需要获得响应代码。至少,您需要知道请求是否成功,从而知道从< code>getContent()获得的对象是否有效。你的方法似乎对此没什么帮助。

    同样,您的方法会忽略 HTTP 标头(请求或响应),例如与缓存相关的标头(上次修改ETag过期)。

  •  类似资料:
    • 我正在Java开发一个游戏,使用RMI进行所有网络通信。RMI允许我在服务器上调用方法,但对我来说还不够。我还希望服务器能够在连接的客户端之间传播消息。 我的客户机查找服务器(它的接口扩展为远程)并在其上注册。它允许服务器知道谁已连接。我的客户机还实现了一个扩展远程的接口。这是我的代码的一部分: 接口声明: 服务器端: 客户端: 此解决方案适用于本地,但当我尝试通过Internet使用它时则不起作

    • 我想通过“id”从我的mongodb获取数据。如果我的id与mongodb中id的值匹配,则它将获取该对象,但其抛出错误为: {“message”:“对于模型“PostMessage”“”的路径“\u id”处的值“s-CoAhDKd”,转换为ObjectId失败}

    • 我有一个API,它返回的数据类型为_HttpClientResponse,因为我使用的是httpClient,我使用下面的 当我打印结果i/flatter(23708):字符串i/flatter(23708):{“结果”:[{“IPAddress”:“192.1.1.1”,“说明”:“Windows 2016 Server”},{“IPAddress”:“192.1.1.1”,“说明”:“Wind

    • 我有一个使用redux的应用程序 我也曾在本地获取数据。 在我的反应组件中,我使用来获取数据。但我什么也没得到。 如何在我的组件中获取数据? 演示:https://codesandbox.io/s/nervous-rosalind-lp16j?file=/src/App.js:242-328

    • 我使用以下代码调用google的语音识别器: 在我的测试机器Nexus 7和Android 4.3中,这在没有网络连接的情况下工作。我认为它在任何android设备上都能起到同样的作用。然而,当我在三星Galaxy S2上试用Android版姜饼时。el21,语音识别器活动出现,但表示需要网络连接,拒绝工作。为什么它在Nexus 7中工作而在Galaxy S2中不工作?它是脱机工作还是需要网络连接

    • 我有一个wordpress安装,我在其中安装了codeigniter。一切顺利,我也进入了数据库。现在我为wordpress安装了一个插件:WooCommerce。使用这个插件,您可以在数据库中存储产品和productdata。现在我需要在codeigniter应用程序中访问来自woocommerce产品的数据。 Woocommerce是这样存储其产品的: 所有产品都进入一个名为:wp_posts