适用于 Android 的 REST API 客户端库

2024-01-10

我们正在构建一个基于位置的消息应用程序,它使用 Parse.com 作为后端 (Parse.com 类似于 Urban Airship/PubNub 等),我们现在想要切换到我们自己的后端以获得更好的控制。为此,我们构建了一个基于 Node.js 的后端,其功能通过 REST API 公开

为了使用这个 API,我们想要构建一个 Android 库(类似于Parse.com 的 Android SDK https://parseplatform.github.io/docs/android/guide/)它抽象了所有 HTTP 请求/响应或 REST API 调用,并为各种操作(如 getUsers()、sendMessage() 等)提供直接函数

在Android中实现REST API客户端的方法:

  • Using IntentService + 结果接收器 http://neilgoodman.net/2012/01/01/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-2/
  • Service
  • 异步任务
  • Using Loaders http://neilgoodman.net/2011/12/26/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-1/

现在,考虑到我们想要构建一个 android 库,并且在用户与应用程序交互时可能会同时进行 REST API 调用,哪种方法最适合继续进行?我也愿意接受其他建议/推荐。

UPDATE:我们首先使用 IntentService + ResultReceiver 构建了自己的库,效果很好。但后来我们偶然发现Android 异步 HTTP http://loopj.com/android-async-http/。用它。这很棒!


我见过的基于 Google IO Pro Tips 2010 的最佳实现是 RoboSpice 库,它基于 REST,并且非常巧妙地与 Activity 生命周期配合使用,不会泄漏内存。

Quick 信息图表 https://raw.github.com/octo-online/robospice/master/gfx/RoboSpice-InfoGraphics.png图书馆是here https://github.com/octo-online/robospice

  • 加载器是为数据库而不是 REST 设计的,它们会在活动重置时重置,这意味着您会丢失数据。
  • 异步任务,只是没有。
  • 意图服务 + 结果接收器基本上是 RoboSpice 的工作方式,所以如果您正在构建自己的库,我会采用这种方法!
  • Service 也很好,类似于 IntentService 方法,但 IntentService 在这种情况下工作得更好一些。

The Service方法也许更好,看看 robospice 服务 https://github.com/octo-online/robospice/blob/release/robospice-core-parent/robospice/src/main/java/com/octo/android/robospice/SpiceService.java他们使用一个ExecutorService这终止了Service当它用完时Requests就工作而言,这是 Java 并发性多于 Android 特有的并发性。需要注意的是,服务在处理请求时运行,如果没有剩余请求,则服务会终止自身。

使用的优点ExecutorService或任何类型的线程池,您可以定义一次可以运行多少个请求。除非你的连接速度非常快,否则我建议最多 2-4 个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Android 的 REST API 客户端库 的相关文章

随机推荐

  • 如何在 Apache-Spark 中连接主从? (独立模式)

    我在用着Spark独立模式 https spark apache org docs latest spark standalone html以独立模式安装 Spark 的教程页面 1 我通过以下方式开始了大师生涯 sbin start ma
  • 错误:“非静态字段、方法或属性需要对象引用...”[重复]

    这个问题在这里已经有答案了 我正在用 C 创建一个应用程序 它的功能是评估给定的数是否是素数以及相同的交换数是否也是素数 当我在 Visual Studio 中构建解决方案时 它说 非静态字段 方法或属性需要对象引用 我在使用 voltea
  • 将 Spark 结构化流与 Confluence 架构注册表集成

    我在 Spark 结构化流中使用 Kafka Source 来接收 Confluence 编码的 Avro 记录 我打算使用Confluence SchemaRegistry 但与spark结构化流的集成似乎是不可能的 我已经看到这个问题
  • C# 每 X 分钟运行一个线程,但前提是该线程尚未运行

    我有一个 C 程序 需要每 X 分钟调度一个线程 但前提是之前调度的线程 从 X 分钟开始 当前尚未运行 一个普通的老Timer单独运行是行不通的 因为它每 X 分钟调度一个事件 无论先前调度的进程是否已完成 将要分派的进程执行其任务所需的
  • 如何在返回集合的 lambda 中使用异步

    我有一个异步 上游 方法 我试图遵循最佳实践 并在堆栈中全力以赴地进行异步 在 MVC 内的控制器操作中 如果我依赖 Result 我可以预料到会遇到死锁问题 将控制器操作更改为异步似乎是可行的方法 但问题是异步方法在 lambda 中被多
  • SSMS 从我的存储过程中删除预 BEGIN 注释

    我正在运行 SSMS 12 0 2000 8 如果我使用SSMS查询编辑器创建一个存储过程 如下例 之前的注释BEGIN当我执行 保存它时被删除 CREATE PROCEDURE myproc Say goodbye to this com
  • C# 检查 JSON 文件是否包含字符串

    我正在尝试这样做 以便我可以检查字符串是否在 json 中 例如 在我的 JSON 文件中存在 name Disp R name Disp L name Disp C 每当 Disp 在字符串中时 整个值都应该存储在列表中 我就是这样做的
  • MySql:限制一张表中某一列的更新权限

    我有一个表 我们称之为学生表 其模式称为注册 表学生有一个名为地址的列 我不希望某个用户更新该列 其他权限都可以 例如选择 插入 该表中以及该架构中的所有其他列都应该具有更新权限 这可行吗 您可以设置数据库 表 列的权限 但我真的不会尝试在
  • 艾里函数积分的根(matlab)

    我想解下面的方程 我在函数的定义上做错了 但我仍然不明白 function F myairyint x F integral x airy x 1000 end functi2 x myairyint x0 1 1 15 fsolve fu
  • 如何以可微分的方式计算几何平均值?

    如何使用 Pytorch 计算沿某个维度的几何平均值 有些数字可能是负数 该函数必须是可微的 几何平均值的已知 合理 数值稳定版本是 import torch def gmean input x dim log x torch log in
  • 有没有办法将通用列表转换为接口/基类类型列表?

    我试图向某人展示接口在他们创建的疯狂情况下的用途 它们在列表中有几个不相关的对象 并且需要对每个对象中的两个字符串属性执行操作 我指出 如果他们将属性定义为接口的一部分 他们可以使用接口对象作为作用于它的方法参数的类型 例如 void Pr
  • AES 加密和密钥存储?

    几年前 当我第一次接触 ASP net 和 NET Framework 时 我构建了一个非常简单的在线文件存储系统 该系统使用 Rijndael 加密来存储服务器硬盘上的加密文件 并使用 HttpHandler 来解密并将这些文件发送到客户
  • 手动编辑 Excel 365 并使用图形 API 延迟读取

    我有一个 Excel 在线文档 用户可以在 Excel 365 Web 应用程序中编辑该文档 我有一个使用图形 API 读取此 Excel 文件的应用程序 我已经成功地从文件中读取数据 但是当用户更改 Excel 文件并且 Excel 表示
  • 是否可以在 Rx 中的不同线程上调用订阅者的 OnNext?

    我是 Rx 新手 我想知道是否可以将消息分派给不同的订阅者 以便它们在不同的线程上运行 IObserable 如何控制它 据我了解 简单的主题实现是在单个线程上一个接一个地调用订阅者 public class Subsciber IObse
  • PostgreSQL整数数组值使用desc字符串连接到其他表中的整数

    我有一张桌子test包含 int 数组和值的列 例如 1000 4000 6000 or 1000 or 1000 4000 called ekw 这些值与另一个表中的描述字符串匹配 tab test id name ekw 1 One 1
  • 索引 Pandas 数据帧时出现 KeyError

    我正在尝试将 csv 文件中的数据读取到 pandas 数据框中 并访问第一列 日期 import pandas as pd df ticks pd read csv values csv delimiter print df ticks
  • git show HEAD^ 似乎不起作用。这是正常的吗?

    我正在使用 Zsh 并尝试为项目运行 git show 以查看我的修订历史记录 如果我做 git show HEAD 它可以很好地向我显示我的最后一次提交 但是以下命令不起作用 master 5 project git show HEAD
  • 如何在 Google Datastore 中添加复合索引?

    我现在使用 Google Datastore 作为我公司的数据库 今天 我做了一个索引 它成功地列在 索引 中 但是我创建的索引的大小和实体是空的 谷歌数据存储的文档说索引是自动生成的 但事实并非如此 是否有任何命令或执行某些操作来生成索引
  • 简单的社区网站是否需要 SSL 证书?

    我正在努力部署一个小型社区网站 用户注册只需要用户名 电子邮件地址和密码 我什至不要求提供姓名 当然也不会存储任何敏感数据 我还应该投资 SSL 证书吗 在没有密码的情况下传输用户密码会被认为是一种糟糕的做法吗 这只是一个个人项目 所以我想
  • 适用于 Android 的 REST API 客户端库

    我们正在构建一个基于位置的消息应用程序 它使用 Parse com 作为后端 Parse com 类似于 Urban Airship PubNub 等 我们现在想要切换到我们自己的后端以获得更好的控制 为此 我们构建了一个基于 Node j