解析本地数据存储查询

时间:2019-07-16 21:54:11

标签: java android parse-platform

我正在尝试在使用Back4App的Parse Server作为后端的Android应用程序中启用缓存的结果。

我已启用本地数据存储,但似乎无法从网络/缓存的结果中查询。

以下代码来自我的查询

        query.fromLocalDatastore().findInBackground()
                .continueWithTask((task) -> {
                    if (task.isFaulted() && task.getError() instanceof ParseException && ((ParseException) task.getError()).getCode() == ParseException.CACHE_MISS) {
                        return query.fromNetwork().findInBackground();
                    }
                    Log.d("Cache", "" + task.getResult().size());
                    return task;
                }, Task.UI_THREAD_EXECUTOR)
                .continueWithTask((task) -> {
                    // Update UI with results ...
                    Log.d("Network", "" + task.getResult().size());
                    ParseObject.pinAllInBackground(task.getResult());
                    return task;
                }, Task.UI_THREAD_EXECUTOR);

logcat显示大小为0的缓存和网络。

我尝试了以下方法:

        query.fromLocalDatastore().findInBackground()
                .continueWithTask((task) -> {
                    // Update UI with results from Local Datastore ...
                    ParseException error = (ParseException) task.getError();
                    if (error == null) {
                        Log.d("Cache", "" + task.getResult().size());
                    }
                    // Now query the network:
                    return query.fromNetwork().findInBackground();
                }, Task.UI_THREAD_EXECUTOR)
                .continueWithTask((task) -> {
                    // Update UI with results from Network ...
                    ParseException error = (ParseException) task.getError();
                    if (error == null) {
                        Log.d("Network", "" + task.getResult().size());
                    }
                    return task;
                }, Task.UI_THREAD_EXECUTOR);

执行高速缓存,然后执行网络,并且正在运行。 但是我想要Cache否则Network,如果错误不为空。

1 个答案:

答案 0 :(得分:1)

似乎您的对象从未被固定过,因此您的本地查询总是成功返回0个对象,并且它继续不固定任何内容。尝试类似的东西:

            query.fromLocalDatastore().findInBackground()
                .continueWithTask((task) -> {
                    ParseException error = (ParseException) task.getError();
                    if (error != null || task.getResult().size() == 0) {
                        return query.fromNetwork().findInBackground();
                    }
                    Log.d("Cache", "" + task.getResult().size());
                    return task;
                }, Task.UI_THREAD_EXECUTOR)
                .continueWithTask((task) -> {
                    // Update UI with results ...
                    Log.d("Network", "" + task.getResult().size());
                    ParseException error = (ParseException) task.getError();
                    if (error == null) {
                        ParseObject.pinAllInBackground(task.getResult());
                    }
                    return task;
                }, Task.UI_THREAD_EXECUTOR);