2016-08-16 117 views
1
我有得到复制功能的问题,为我的本地Couchbase数据库的工作和我的Android应用

的Android Couchbase精简版复制

private void startSync() { 
    URL syncUrl; 
    try { 
     syncUrl = new URL("http://10.0.2.2:4984/sync_gateway"); // I am testing with the Android emulator 

     manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS); 
     database = manager.getDatabase("db"); 

     Replication pullReplication = database 
       .createPullReplication(syncUrl); 
     pullReplication.setContinuous(true); 
     pullReplication.addChangeListener(this); 
     pullReplication.start(); 

    } 
    catch (MalformedURLException e) { 
     throw new RuntimeException(e); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 

    Query query = database.createAllDocumentsQuery(); 
    query.setAllDocsMode(Query.AllDocsMode.ALL_DOCS); 
    QueryEnumerator result; 
    try { 
     result = query.run(); 

     for (Iterator<QueryRow> it = result; it.hasNext();) { 
      QueryRow row = it.next(); 
      Log.i("CouchActivity", "Getting document i: " + row.getDocumentId()); 
     } 
    } 
    catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 
} 

一次,我已经创建了一个拉复制,我开始查询所有的文件本地数据库,但没有文件返回。

的同步网关我的配置文件如下:

{ 
    "interface": ":4984", 
    "adminInterface": ":4985", 
    "log": ["REST"], 
    "databases": { 
    "sync_gateway": { 
    "server": "http://localhost:8091", 
    "bucket": "stations", 
    "sync": `function(doc) {channel(doc.channels);}`, 
    "users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } } 
    } 
    } 
} 

当我键入localhost:4984/sync_gateway,我得到的“

{"committed_update_seq":1,"compact_running":false,"db_name":"sync_gateway","disk_format_version":0,"instance_start_time":1471324911376777,"purge_seq":0,"state":"Online","update_seq":1}" 

不知道,如果一个响应问题是与Android方,因为我看到同步网关输出“POST/sync_gateway/_changes”当我运行我的Android代码。任何人都可以解释为什么复制不起作用?

更新 - 我能确认我的设置正确完成。我所遇到的问题与我创建文档的方式有关。我通过管理控制台创建的那些文件没有为了被识别为有效文档而需要的元数据。我通过推送复制通过我的应用填充数据库来填充服务器端数据库。通过POST请求创建文档也可以工作。

+1

你有什么期望在Couchbase精简版的所有文档查询的结果看?来自同步网关的响应表明不存在复制更改(update_seq = 1)。您可以通过REST API在Sync Gateway上添加新文档(请参阅规范中的curl请求示例http://developer.couchbase.com/mobile/swagger/sync-gateway-public/#!/document/post_db)以及然后检查它是否由Couchbase Lite上的所有文档查询返回。 – jamiltz

+0

这些文档都是通过管理控制台添加的。最初的拉不能同步数据库中的三个文档。我会试试这个请求。 – user1927638

回答

1

如果要添加通过管理控制台文件,你缺少同步网关之间。跟踪特定文档(它的序列号)的更改将保留在同步网关中。因此,当代理试图提取文档时,它会发现对参考其本地数据库没有任何更改,因此您不会收到任何内容。 要实际提取文档,您必须先通过Sync Gateway将其从代理中推送出去。管理控制台直接将文档添加到与Sync网关无关的服务器上的SQL表中。