Android 如何使用RoboSpice连接到挂起的请求(Splash>;主活动)?

Android 如何使用RoboSpice连接到挂起的请求(Splash>;主活动)?,android,ormlite,robospice,Android,Ormlite,Robospice,我有一些关于RoboSpice(高级用法)的问题 注意:我将RoboSpice与或mlite一起使用 我的Android应用程序由两个主要活动组成:第一个是SplashActivity(启动时启动),第二个是MainActivity(启动屏幕后5秒启动)。我对splash执行2个请求: 喷溅活动 public class SplashActivity extends BaseActivity { private fooRequest fooRequest; private ba

我有一些关于RoboSpice(高级用法)的问题

注意:我将RoboSpice与
或mlite一起使用

我的Android应用程序由两个主要活动组成:第一个是
SplashActivity
(启动时启动),第二个是
MainActivity
(启动屏幕后5秒启动)。我对splash执行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) {
        }
    }

}
但是我不明白这里的
spiceManager.getFromCache
的目的


谢谢

我会让启动画面持续更长时间。它的用途看起来真的很模糊:显示徽标或其他东西,或者执行请求并显示“请等待消息”

在第一种情况下,不执行任何请求都可以。在第二种情况下,可以等待他们回来

我真的更喜欢那些需要快速启动的应用程序。启动屏幕应持续不到1秒。之后的第一个屏幕应处理数据查询和请等待消息

但要回答你的问题:

2) 是的,SpiceManager缓存方法使用缓存到期的方式与executeRequest相同。您可以检查缓存中是否有内容,但必须通过指定数据的过期限制来指定“有效”数据的含义

3) 我看不到有重试策略的链接和您的总体问题。默认情况下,RoboSpice具有重试策略,可以对失败的请求重试3次。如果无法从缓存中获取数据,则表示缓存中没有任何内容。如果调用了侦听器的故障挂钩,则网络请求失败。 两者可以是同一个监听器,你的应用程序应该有一个通用机制,1)显示出问题,2)如果需要,在一段时间后重新启动请求(可能是刷新按钮/项目菜单)


我希望我能帮上忙,但不是很确定。

有什么想法(问题2+3)?为什么我从类型SpiceManager中获取addListenerIfPending(类、对象、请求侦听器)的方法是不推荐的?现在我们必须使用PendingRequestListener。你能为“CalendarSpiceService”发布代码吗?@MarianPaździoch当然!
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);
        }
    }

}