无法删除本地数据库CouchBase lite中的文档

问题描述 投票:1回答:1

我在CouchBase Lite 1.3上将AndroidCouchDB 1.6一起使用。

如果删除CouchDB上的文档,则不会在设备本地复制数据库上删除该文档。

这是我的代码:

  private Database master;
    private Manager manager;
    public Replication pullmaster;

    manager = new Manager(new AndroidContext(c), Manager.DEFAULT_OPTIONS);
    master = manager.getDatabase("master");
    pullmaster = master.createPullReplication(url);

     master.addChangeListener(new Database.ChangeListener() {
                    @Override
                    public void changed(Database.ChangeEvent event) {
                        if (event.isExternal()) {
                            for (DocumentChange dc : event.getChanges()) {

                                if (dc.isDeletion()) {
                                    Document doc = event.getSource().getDocument(dc.getDocumentId());
                                    try {
                                        doc.purge();
                                    } catch (CouchbaseLiteException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                    }
                });

  startReplicators();

然后在这里开始复制

public void startReplicators() {
        if (pullmaster != null) {
            pullmaster.start();
        }
        if (pullwork != null) {
            pullwork.start();
        }
        if (pushwork != null) {
            pushwork.start();
        }
    }

它不起作用,我的意思是它不会删除我正在CouchDb中删除的文档,没有错误。

我在此行上设置了一个断点

master.addChangeListener(new Database.ChangeListener(){....}

如果在CouchDB中创建文档,则会调用addChangeListener(),但是如果删除了文档,则不会调用该方法。

关于我在做什么错的任何线索?

android couchdb couchbase-lite
1个回答
0
投票

在Couchbase Lite 2.7.0版中,您可以基于id从数据库中删除文档,如下所示:

try {
        for (Result result : docList) {
            String id = result.getString(0);
            Document doc = database.getDocument(id);
            database.delete(doc);
        }
    } catch (CouchbaseLiteException e) {
        e.printStackTrace();
    } 

要获取文档ID,您必须查询以下内容:

Query query = QueryBuilder
    .select(SelectResult.expression(Meta.id), SelectResult.all())
    .from(DataSource.database(database))

ResultSet rs = query.execute();
    for (Result result : rs) {
        Dictionary data = result.getDictionary("db_name");
        Log.e("CouchbaseLite ", "document: " + data);
        Log.e("CouchbaseLite ", "id: " + result.getString(0));
    }
© www.soinside.com 2019 - 2024. All rights reserved.