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



我正在使用CouchBase Lite 1.3Android超过CouchDB 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()但如果我删除了该文档,则不会调用该方法。

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

在 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));
}

最新更新