我对 RoboSpice(高级用法)有一些疑问。
注意:我将 RoboSpice 与OrmLite
.
我的 Android 应用程序由两个主要活动组成:第一个是SplashActivity
(启动时开始),第二个是MainActivity
(在启动画面后 5 秒启动)。我在启动时执行 2 个请求:
飞溅活动
public class SplashActivity extends BaseActivity {
private fooRequest fooRequest;
private barRequest barRequest;
private exampleRequest exampleRequest;
private NewsRequest newsRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
fooRequest = new fooRequest();
barRequest = new barRequest();
...
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Launch MainActivity...
}
}, 5000);
}
@Override
protected void onStart() {
super.onStart();
getSpiceManager().execute(fooRequest, new Integer(0), DurationInMillis.ONE_DAY, new fooRequestListener());
getSpiceManager().execute(barRequest, new Integer(1), DurationInMillis.ONE_DAY, new barRequestListener());
}
public final class fooRequestListener implements RequestListener<Foo> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.w("MyApp", "RoboSpice - Foo request failure");
}
@Override
public void onRequestSuccess(final Foo result) {
}
}
public final class barRequestListener implements RequestListener<Bar> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.w("MyApp", "RoboSpice - Bar request failure");
}
@Override
public void onRequestSuccess(final Bar result) {
}
}
}
问题
我的应用程序逻辑不是很可靠:我们不能确定在 MainAcitivty 启动时请求是否完成。在 MainActivity 上,我使用 OrmLite 查询我的数据库以获取一些数据并显示它们。因此,如果在 SplashActivity 上启动的请求未完成,我的视图将不显示任何内容。
问题
1)我认为我需要为我的待处理请求添加一个监听器(如果存在这样的请求)。在 RoboSpice Wiki 上,它说使用spiceManager.addListenerToPendingRequest
. 尽管我进行了测试,但我还没有成功地把它拿出来。也许我做错了什么?你能给我代码示例吗? 已解决(见下文)
2)目前,用户在到达主屏幕之前仍在等待 5 秒(定时器 Splash)。如何检查数据是否在缓存中?使用spiceManager.getDataFromCache()
(它考虑到过期时间?)。
3)失败请求的最佳重试策略是什么(a.如果没有再次创建数据库,则在第一次启动时;b.如果数据库存在但数据已过期)?
编辑
问题 #1 已解决(我在原始代码中犯了一个错误) - #2 和 #3 仍然相关。这是做什么(如果它可以帮助某人......):
public class MainActivity extends BaseActivity {
private SpiceManager spiceManager = new SpiceManager(CalendarSpiceService.class);
...
@Override
protected void onStart() {
super.onStart();
spiceManager.start(this);
spiceManager.addListenerIfPending(Foo.class, new Integer(0), new fooRequestListener());
spiceManager.addListenerIfPending(Bar.class, new Integer(2), new newsRequestListener());
spiceManager.getFromCache(Foo.class, new Integer(0), DurationInMillis.ONE_DAY, new fooRequestListener());
spiceManager.getFromCache(Bar.class, new Integer(2), DurationInMillis.ONE_DAY, new newsRequestListener());
}
...
public final class fooRequestListener implements RequestListener<Foo> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.w("MyApp", "RoboSpice - Foo request failure");
}
@Override
public void onRequestSuccess(final Foo result) {
String test = result.getResult().iterator().next().getTitle();
Log.w("MyApp", "RoboSpice - Foo request OK ! "+test);
}
}
public final class barRequestListener implements RequestListener<Bar> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.w("MyApp", "RoboSpice - Bar request failure");
}
@Override
public void onRequestSuccess(final Bar result) {
Log.w("MyApp", "RoboSpice - Bar request OK ! "+test);
}
}
}
但我不明白spiceManager.getFromCache
这里的目的......
谢谢!