我有我的Android应用程序,它不是为离线工作而构建的,所以它依赖于网络连接/数据。
应用程序进行了大量的网络调用,用新的数据集更新API。
我正在对它进行更改,使其脱机工作。
方法我想我将创建一个房间数据库,我将保存改造请求,当有连接时,我将从数据库中提取它们并将其发送到API。
听起来对吗?有没有其他更好的方法,我可以在没有连接时保存请求,当有连接时将这些保存的请求发送到服务器。
我们也可以在房间数据库中保存请求
我不打算做数据库同步与BE(API)和BE(API)处理请求。
你的建议很有价值
谢谢R
2条答案
按热度按时间f0ofjuux1#
我想立刻说--我认为你所要求的不是一个好主意,我不能建议你这样做。但这是你的选择。我想到了在房间里保存请求(也许有点奇怪,但让它去吧):
1.假设你有N个API端点。它们中的每一个都有一些参数(从0到M)。
1.您可以在Room中创建一个表requests,其中包含(1 + P)列,其中P -端点参数的最大数量(可能应该有时间顺序的日期以及是否已处理请求的标记)。所有列都是String类型。第一列-用于端点名称(键)。您将使用该键来定义一个Retrofit端点。
1.在离线模式下,您可以将请求保存在表requests'中的行-端点名称,并将每个参数序列化为JSON字符串。
1.当网络打开时-你查询你的表,反序列化你的API参数,并在一些循环中重新创建你的rest Api请求,在一些巨大的when-statement中,就像这样:
// restApi - your Retrofit interface // apiName - endpoint String key from db // parameter1 - endpoint's parameter1, restored from db saved JSON string // .... // parameterM - endpoint's parameterM, restored from db saved JSON string when (apiName) { "endpoint1" -> restApi.someYourEndPoint1(parameter1) "endpoint2" -> restApi.someYourEndPoint2(parameter1,parameter2) .......... }
8zzbczxx2#
按照以下步骤创建MVVM和改造中的房间的此请求:首先:创建一个保存离线数据的表,使用Dao接口,可以创建如下的insert和Query函数(使用suspend的原因是它表明该方法可以在协程scop中用于处理异步操作):
ViewModel中的第二步创建一个insert方法来保存来自改装的数据:
和瓦尔allNews =repositoryOffLine.allNewsInfo,实际上从数据库中读取数据,然后在Activity或片段中使用
connectivityManager
和此方法处理Internet连接:最后检查互联网是否连接: