【问题标题】:Receiving responses in Android from a Spring REST service在 Android 中从 Spring REST 服务接收响应
【发布时间】:2016-10-06 03:23:04
【问题描述】:

我在前端使用 Android,并且正在使用 Spring 的 REST 客户端库将 HTTP 请求发送到 REST Web 服务。我已经在网上阅读了一些示例,其中人们使用AsyncTaskdoInBackgroundAsyncTask 方法中使用RestTemplate 来完成此操作,但我也阅读了RestTemplateAsyncTask 之外使用的示例,甚至在活动或片段中。使用一种方法而不是另一种方法有什么意义吗?

其次,当通过 RestTemplate 的exchangegetForAllObject 从服务器接收响应时,根据收到的数据,我的客户端应该做不同的事情。例如,如果我想搜索用户,我应该收到User 对象,然后我的客户端应该更新用户片段/活动,但是如果我想登录,我应该收到不同的数据,我的客户端应该执行不同的后续操作任务。

如果我每次发送 HTTP 请求时都创建一个 AsyncTask,然后接收到响应,如何区分客户端需要完成哪些后续任务?是使用枚举的首选方法吗?例如,当我想从服务器获取数据时,我可以实例化一个 AsyncTask 并作为 execute 参数传递一个枚举来指定要发送哪个 HTTP 请求,以及一个枚举来指定如何处理接收到的数据。那么我可以只使用基于枚举调用不同函数的switch语句吗?

如果这些都没有意义,是否有更标准的方法来处理来自服务器的响应?

【问题讨论】:

    标签: android spring rest


    【解决方案1】:

    来自docs

    AsyncTask 允许正确且轻松地使用 UI 线程。此类允许您执行后台操作并在 UI 线程上发布结果,而无需操作线程和/或处理程序。

    AsyncTask 提供了一种在后台执行任务并与主 UI 线程交互的便捷方式。如果您没有使用 AsyncTasks,则必须实现自己的方法来与主线程同步以更新 UI。如果您正在调用任何后端服务或执行长时间运行的操作,最好使用异步任务。

    让相同的 REST 端点基于枚举返回不同的对象是一种不好的做法。有两个独立的端点。对搜索用户进行一次 GET 调用,对登录用户进行一次 POST 调用。在客户端也有关于消费上述端点的单独实现。在需要时适当地使用它们。

    【讨论】:

    • 我仍然不确定这是如何工作的。如果我有一个发送 GET 请求的函数和一个发送 POST 请求的函数,这两个函数不会实例化一个扩展 AsyncTask 以在后台运行以发送请求和接收响应的类吗?那么在调用onPostExecution 期间,AsyncTask 怎么会知道从那里去哪里,不知道初始 HTTP 请求是 POST 还是 GET 请求?我是否需要为我希望发送的每种类型的 HTTP 请求扩展一个 AsyncTask(一个用于登录,一个用于获取 x 数据,一个用于获取 y 数据)?
    • 你必须有两个独立的异步任务。作为示例 UserSearchAsyncTask 和 UserLoginAsyncTask。这两个类都扩展了 AsyncTask。然后在必要的地方上课。通常,您有单独的活动或片段来处理这两种情况。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2019-03-31
    • 2019-11-27
    • 2018-02-04
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多