保存在sqlite冻结UI中保存的robospice请求结果

时间:2014-12-01 13:26:48

标签: android database sqlite robospice

我使用Robospice(迄今为止我最好的lib)和Sping ang Gson与我的网络服务进行沟通 - 简单,干净,工作正常。现在我想将我的数据存储在sql数据库中 - 例如用于离线模式。我的问题是如何结合robospice与ormlite或如何使用robospice扩展为ormlite。

到目前为止,我已经创建了这个

public class MyActivity extends Activity {

private void performRequest() {
    MyRequest request = new MyRequest();
    spiceManager.execute(request, request.createCacheKey(),
            DurationInMillis.ONE_MINUTE, new MyRequestListener());
}

private class MyRequestListener implements
        RequestListener<MyDaoList> {
    @Override
    public void onRequestFailure(SpiceException e) {
        ...
    }

    @Override
    public void onRequestSuccess(MyDaoList myDaoList) {

        RuntimeExceptionDao<MyDao, Integer> myDao =  mDatabaseHelper.getMyDataDao();
        for (MyDap mDao : myDaoList) {
            myDao.createIfNotExists(mDao);
        }

        ...
    }
 }
}

工作正常但不完美。数据被下载,并保存在我的sql数据库中。但是当需要保存大量数据时,此解决方案会冻结我的UI。我怎样才能避免这种冻结?

我用sqllite检查了robospice样本,但我的样本有问题,到目前为止看起来还没有完成扩展。

1 个答案:

答案 0 :(得分:0)

UI冻结,因为在UI线程上调用onRequestSuccess方法(并且它完全正常)并且保存数据需要一些时间。因此,您应该在onRequestSuccess中创建新线程(或AsyncTask),并在此新线程中将数据保存到DB。