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

在Android中编码许多HTTP请求的良好设计模式

司空奕
2023-03-14

在我的应用程序中,我有很多GET、POST、PUT请求。现在,我有一个单独的类来保存我下载的数据,并有许多扩展AsyncTask的内部类。在我的singleton类中,我也有一些这样的接口:

/**
* Handlers for notifying listeners when data is downloaded
* 
*/
public interface OnQuestionsLoadedListener {

    public void onDataLoadComplete();

    public void onDataLoadingError();       
}

这种模式(很多扩展AsyncTask的内部类)有问题吗?如果每个HTTP调用只有一个内部类(1个用于GET,1个用于POST,...)?如果是,如何决定在得到请求后做什么?

共有3个答案

连文栋
2023-03-14

在最近开发的应用程序中,我遵循了类似的方案,但此外还实现了一个WebRequest类,执行实际的GET,POST,PUT等。

我现在拥有的是一个“连接器”类,其中有很多异步任务子类。但是,在我的实现中,我让他们接受一个回调对象,其中每个子类都将 Http 结果传递到该对象。

我认为这是一种有效的方式,尽管也许不是理想的方式。

如果我只有一个Asynctask的子类,我可以将请求体(现在构建在这些不同的任务中)、请求url和方法以及回调(在我看来,这是一种获得结果的非常好的方式)传递给它,那么我认为这可能是一种改进。

景同
2023-03-14

许多异步类没有问题。

ido是什么,有一个网络层,一个服务类。将 intent 发送到服务类,并将 resultreceiver 对象作为 intent 的一部分。然后在服务中对异步任务发出http请求,并通过结果接收对象将结果发回。

一个好的设计是将ui(活动或片段)从网络访问中抽象出来。

司马耘豪
2023-03-14

总的来说,在执行网络请求时,你应该远离异步任务。

您的Async任务链接到您的活动。这意味着,如果您的活动停止,您的AsyncTask就会停止。这不是获取要在该活动中显示的数据时的最大问题,因为您不会关心获取是否已停止。但是,当您想将一些保存的数据发送到服务器时,并且您的用户在发送所有内容之前按了“返回”或类似的键时,数据可能会丢失并且无法发送。

相反,您希望拥有的是一项服务,无论您的活动发生什么,它都会继续运行。

我建议你看看RoboSpice。即使您决定不使用它,阅读它的作用以及为什么使用它,也会让您很好地了解不使用AsyncTasks进行网络请求的很长的原因列表,以及为什么最好使用服务。如果您使用它,那么您关于有效网络请求的其余问题也已过时,因为他们将以最佳方式为您处理它。

 类似资料:
  • 问题内容: 我需要一个2D数组(作为Json)从服务器发送到客户端。尺寸大约为400x400,每个条目大约包含4个字符的文本。因此,这大约需要640KB的数据。 以下哪种极端方法更好? 我一次性提出了所有数据的大型HTTP请求。 我提出了400个请求-每个请求都要求一行(大约1.6 KB) 我认为最佳方法应该在中间。谁能告诉我这个数据的最佳单个请求大小是多少? 谢谢。 问题答案: 除非您处理的是慢

  • 目标 遵循类大小、方法大小和方法名称的最佳实践 了解重构的重要性 保持一致的编码风格和注释用法 使用内置记录功能 最佳编码实践 您现在已经学习了本学习路径的一半内容,已经掌握了足够多的 Java 语法来编写基本 Java 程序。在继续学习更高级的主题之前,目前是一个了解一些最佳编码实践的不错时机。阅读一些可帮助您编写更干净、更可维护的 Java 代码的必要建议。 保持类小巧 目前您已经创建了一些类

  • 我正面临着一个问题,即设计能够执行网络I/O的方法(用于可重用库)。我读过这个问题 API设计中C#5Await/Async模式 以及其他与我的问题更接近的问题。 所以,问题是,如果我想同时提供异步和非异步方法,我必须如何设计这些? 例如,要公开方法的非异步版本,我需要执行如下操作 我觉得这不是个好设计。我想要一个关于如何定义私有方法的建议(例如),这些私有方法可以包装在公共方法中以提供两个版本。

  • 我正在创建一个UDP服务器,它需要从各种客户端接收UDP数据包,然后将它们转发给其他客户端。我使用C#,所以每个UDP套接字对我来说都是一个Udp客户端。我想我想要2个Udp客户端对象,一个用于接收,一个用于发送。接收套接字将绑定到已知端口,发送者根本不会绑定。 服务器将获取每个数据包,查找数据包数据中的用户名,然后根据服务器维护的路由列表,将数据包转发给1个或多个其他客户端。 我开始监听Udp客

  • 本文向大家介绍SQL 设计良好的表的属性。,包括了SQL 设计良好的表的属性。的使用技巧和注意事项,需要的朋友参考一下 示例 真正的关系数据库必须超越将数据扔到几个表中并编写一些SQL语句来提取数据的能力。 最好的一个错误设计的表结构将减慢查询的执行速度,并可能使数据库无法按预期运行。 一个数据库表不应被视为另一个表。它必须遵循一组规则才能被认为是真正的关系。从学术上讲,区分是一种“关系”。 关系

  • 问题内容: 我的Java Web应用程序有问题。 这是index.jsp中的代码: 当我有线请求时,我的浏览器发送以下标头: Tomcat服务器返回以下信息: 但是,如果我以我的形式发送“é”(UTF-8中的%C3%A9),则会显示“é”。 我了解的是浏览器发送了一个用UTF-8(%C3%A9)编码的“é”。 但是服务器将其解释为ISO-8859-1。因此,%C3解码为Ã,%A9解码为©,然后发