我在CouchBase Lite 1.3
上将Android
与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));
}