【问题标题】:Parse Local Datastore Query解析本地数据存储查询
【发布时间】:2019-07-16 21:54:11
【问题描述】:

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

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

以下代码来自我的查询

        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 else Network if error 不为空。

【问题讨论】:

    标签: java android parse-platform


    【解决方案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);
    

    【讨论】:

    • 谢谢,我最终解决了这个问题,并且与您的答案相似(虽然不是那么好)。
    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2015-11-26
    • 2015-02-27
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多