Couchbase - 查询未更新

时间:2016-01-18 06:17:37

标签: android couchbase-lite

我制作了一个过滤器并过滤了沙发基座的值。只有第一次我能够获得正确的过滤器值,之后它每次都会返回先前的过滤器值。所以我每次都要清除缓存。请帮忙。

这是我的查询代码。

public Query getFilterQuery(final String titles, final String sender,
            final String sysName, final String prosName, final String fromDate,
            final String toDate) {

        final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        com.couchbase.lite.View view = database.getView(FILTER_VIEW);
        if (view.getMap() == null) {
            Mapper mapper = new Mapper() {
                public void map(Map<String, Object> document, Emitter emitter) {

                    String type = (String) document.get(AppConstants.KEY_DOC_TYPE); 
                    if (AppConstants.DOC_TYPE_MESSAGE.equals(type)) {

                        String message_type = (String) document.get(AppConstants.MESSAGE_TYPE);

                        Log.d("message_type", message_type);
                        if (message_type.equals("task")) {
                            String msgDetails = (String) document.get(AppConstants.MESSAGE_BODY);
                            try {
                                JSONObject msgObj = new JSONObject(msgDetails);
                                DocumentReader documentReader = mApplication
                                        .getDocumentReader(message_type);
                                documentReader.setJsonObject(msgObj);
                                String title = (String) documentReader.getValue("task.title");
                                JSONArray infoArray = (JSONArray) documentReader.getValue("task.info");
                                String taskDate = null;
                                String senderName = null;
                                String processName = null;
                                for (int i = 0; i < infoArray.length(); i++) {
                                    JSONObject jObject = infoArray
                                            .getJSONObject(i);
                                    String field_label = jObject
                                            .getString(AppConstants.LABEL);

                                    if (field_label.equals(TASK_DATE)) {
                                        taskDate = jObject
                                                .getString(AppConstants.FIELD_VALUE);
                                        Log.d("taskDate", taskDate);
                                    }
                                    if (field_label.equals(SENDER)) {
                                        senderName = jObject
                                                .getString(AppConstants.FIELD_VALUE);
                                    }
                                    if (field_label.equals(PROCESS_NAME)) {
                                        processName = jObject
                                                .getString(AppConstants.FIELD_VALUE);
                                    }
                                }
                                Date dateFrom = null;
                                Date dateTo = null;

                                try {

                                    date = dateFormat.parse(taskDate);
                                    Log.d("taskDate", taskDate);
                                    if (toDate != null && fromDate != null) {
                                        dateTo = dateFormat.parse(toDate);
                                        dateFrom = dateFormat.parse(fromDate);
                                    }

                                } catch (ParseException e) {
                                    e.printStackTrace();
                                }

                                /*if (titles != null && titles.contains(title)) {
                                    emitter.emit(document.get(AppConstants.MESSAGE_ID),document);
                                }*/

                                if (senderName != null && senderName.contains(sender)) {
                                    emitter.emit(document.get(AppConstants.MESSAGE_ID),document);
                                }

                                /*if (processName != null && processName.contains(prosName)) {
                                    emitter.emit(document.get(AppConstants.MESSAGE_ID),document);
                                }*/

                                /*if (date.before(dateTo) && date.after(dateFrom)) {
                                    emitter.emit(document.get(AppConstants.MESSAGE_ID),document);
                                }*/

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            };
            view.setMap(mapper, "1");

        }
        Query query = view.createQuery();
        return query;

    }
}

1 个答案:

答案 0 :(得分:2)

Couchbase-lite中的查询分为两部分。

  1. 设置视图(基本上 - 索引)
  2. 针对视图运行查询。
  3. 您应该只创建一次视图(您的映射器)并使用startkey和endkey下的搜索项对其进行查询。 你也可以做一个复合索引,它基本上是来自几个键的字符串复合并由它搜索。

    如果您每次运行查询时都设置了地图 - 查询将不会更新,因为它会查看您的版本参数,并且它始终设置为字符串&#34; 1&#34;。

    如果您要更改它,您将获得一个新的索引查询 - 但是只有在您更改视图时才能在dev中使用它。

    投资回报率。

相关问题