8

我已经成功创建了一个Retrofit API Rest 客户端,它同时进行GETPOST调用,并将其作为后台服务合并到Robospice中。

但是,我希望Robospice服务连接到数据库并异步保存从GET调用中检索到的对象。使用Retrofit Callback类似乎是显而易见的方式,但需要连接到数据库Context,我担心会泄露Context.

那么,让Robospice SpiceService在处理请求之前和之后将数据持久保存到数据库的最佳方法是什么?

4

2 回答 2

2

最后,当我批量处理各种Rest API 服务调用以保存无线电(Reto Meier Dev Bytes: Efficient Data Transfers)时,我RetrofitSpiceServiceRobospice SpiceService包含对DatabaseHelper(需要) 以及Rest服务Context的相应Retrofit回调。

这样,控制器服务处理所有触发(触发控制器服务)并持久化到数据库,而 Rest 服务可以在不知道或类似AlarmManager情况的情况下正常关闭。contextdatabase

对于@lion789:
我有 4 个模型,每个模型都有一个相应的 API 调用来与服务器同步(1 个POST,3 个GET)。
为了处理这些同步调用,我有一个IntentService包含 4 个SpiceManager属性和 4 个改造 Callback类 - 每个模型/API 调用一个。传递一个指示应该调用的 API 序列
。调用适当 的运行,然后触发持久性并调用方法以触发序列中的下一个 API 调用。IntentServiceEnum
IntentServiceSpiceManagerCallbackIntentService

当我将它用于我的身份验证和推送注册代码时,其中很多都是抽象和接口的,所以描述起来有点像噩梦,但到目前为止它运行得很好。

于 2013-10-07T04:11:43.967 回答
2

你的问题对我来说真的很模糊。我不明白为什么你不能使用 RS 的正常持久性机制。如果您这样做,则在执行请求时很容易保留您的数据。

也许我错过了一些东西。因此,如果您的要求真的是自己持久化数据,那么您提出的方法看起来是正确的。您可以将 spice 服务本身注入到您的请求中(例如,请参阅如何在 RetrofitSpiceService 中覆盖 addRequest)。然后,请求将保存一个上下文,该上下文可用于回调内部或请求本身内部的持久性。

最近我使用改造和 RS 编写了一个 POST 请求。我更改了 POST 请求的签名以返回 Void。然后稍微修改改造转换器以处理这种情况并返回 null。如前所述,该请求通过注入接收了 spice 服务,并且可以对数据库执行一些操作。

下面是一些代码,用于从 spice 服务中将应用程序注入到请求中。

    @Override
    public void addRequest(CachedSpiceRequest<?> request,
                    Set<RequestListener<?>> listRequestListener) {
            if (request.getSpiceRequest() instanceof MySpiceRequest) {
                    MySpiceRequest<?> mySpiceRequest = (MySpiceRequest<?>) request
                                    .getSpiceRequest();
                    mySpiceRequest.setApplication(this.getApplication());
            }
            super.addRequest(request, listRequestListener);
    }
于 2013-10-11T08:22:22.793 回答