2016-08-16 14 views
1

私は私の地元のCouchbaseのデータベースと私のAndroidアプリのために働くためにレプリケーション機能を取得して問題が午前:私はプルレプリケーションを作成したらAndroidのCouchbaseのLiteのレプリケーション

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": ["*"] } } 
    } 
    } 
} 

は: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のコードを実行すると、のAndroid側に同期ゲートウェイの出力 "POST/sync_gateway/_changes"が表示されるので、誰でも複製が機能しない理由を誰でも説明できますか?

更新 - セットアップが正しく行われたことを確認できました。私が持っていた問題は、私が自分の書類を作成した方法と関係がありました。管理コンソールから作成したものには、有効な文書として認識されるために必要なメタデータがありませんでした。私はプッシュレプリケーションを介して私のアプリケーションを介してデータベースにデータを投入してサーバー側のデータベースにデータを書き込むことになりました。 POSTリクエストを介してドキュメントを作成することもできます。

+1

Couchbase Liteのすべてのドキュメントクエリの結果には、どのような結果が見込まれますか?同期ゲートウェイからの応答は、複製する変更がないことを示します(update_seq = 1)。 REST APIを使用してSync Gatewayに新しいドキュメントを追加することができます(curlリクエストの例http://developer.couchbase.com/mobile/swagger/sync-gateway-public/#!/document/post_dbを参照してください)。 Couchbase Liteのすべてのdocsクエリから返されるかどうかを確認します。 – jamiltz

+0

ドキュメントはすべて管理コンソールから追加されました。最初のプルでデータベース内の3つの文書を同期させるべきではありません。私はその要求を試してみます。 – user1927638

答えて

1

管理コンソールでドキュメントを追加する場合は、その間に同期ゲートウェイがありません。特定のドキュメント(シーケンス番号)の変更の追跡は、同期ゲートウェイで維持されます。したがって、エージェントがドキュメントをプルしようとすると、ローカルDBを参照して変更がないため、何も表示されません。 実際に文書をプルするには、まずエージェントから同期ゲートウェイを押してプッシュする必要があります。管理コンソールは、同期ゲートウェイとの関係がないサーバーのSQLテーブルにドキュメントを直接追加します。

関連する問題