2016-05-04 3 views
0

Я пытаюсь добавить документы на сервер couchbase (пользовательский интерфейс администратора), а затем попытаться извлечь его с помощью couchbase Lite через шлюз синхронизации, но не смог этого сделать. То, что я пытаюсь достичь, у меня уже есть много данных на сервере couchbase, теперь я хочу, чтобы мое мобильное приложение использовало его, и потому что эти данные не были добавлены с помощью шлюза синхронизации. Я хочу добиться чего-то вроде добавления данных с помощью web now. my couchbase lite, чтобы подключиться к этому серверу couchbase и получить данные. Есть ли способ сделать это? или только данные, которые были добавлены с помощью шлюза синхронизации, могут быть восстановлены?Не удается получить документ из couchbase lite при добавлении документов на сервер couchbase с помощью admin UI

EDIT 1 Добавлено исходные коды

Ниже андроида код приложения

package com.couchbase.examples.couchbaseevents; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import android.util.Log; 

import com.couchbase.lite.CouchbaseLiteException; 
import com.couchbase.lite.Database; 
import com.couchbase.lite.Document; 
import com.couchbase.lite.Manager; 
import com.couchbase.lite.android.AndroidContext; 
import com.couchbase.lite.replicator.Replication; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

    public static final String DB_NAME = "couchbaseevents"; 
    final String TAG = "CouchbaseEvents"; 
    Database database = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d(TAG, "Begin Couchbase Events App"); 
    Manager manager = null; 
    try { 
     manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS); 
     database = manager.getDatabase(DB_NAME); 
    } catch (Exception e) { 
     Log.d(TAG, "Error getting database", e); 
     return; 
    } 
    /*try { 
     database.delete(); 
    } catch (Exception e) { 
     Log.e(TAG, "Cannot delete database", e); 
     return; 
    }*/ 
    try { 
     startReplications(); 
    } catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 
    Document retrievedDocument = database.getDocument("123"); 
// display the retrieved document 
    Log.d(TAG, "retrievedDocument=" + String.valueOf(retrievedDocument.getProperties())); 
    Log.d(TAG, "End Couchbase Events App"); 
    } 
    private URL createSyncURL(boolean isEncrypted){ 
    URL syncURL = null; 
    String host = "http://172.16.25.100"; 
    String port = "4986"; 
    String dbName = "sync_gateway"; 
    try { 
     //syncURL = new URL("http://127.0.0.1 :4986/sync_gateway"); 
     syncURL = new URL(host + ":" + port + "/" + dbName); 
    } catch (Exception me) { 
     me.printStackTrace(); 
    } 
    Log.d(syncURL.toString(),"URL"); 
    return syncURL; 
    } 
    private void startReplications() throws CouchbaseLiteException { 
    Replication pull = database.createPullReplication(this.createSyncURL(false)); 
    Replication push = database.createPushReplication(this.createSyncURL(false)); 
    pull.setContinuous(true); 
    push.setContinuous(true); 
    pull.start(); 
    push.start(); 
    if(!push.isRunning()){ 
     Log.d(TAG, "MyBad"); 
    } 
    /*if(!push.isRunning()) { 
     Log.d(TAG, "Replication is not running due to " +push.getLastError().getMessage()); 
     Log.d(TAG, "Replication is not running due to " +push.getLastError().getCause()); 
     Log.d(TAG, "Replication is not running due to " +push.getLastError().getStackTrace()); 
     Log.d(TAG, "Replication is not running due to " +push.getLastError().toString()); 
    }*/ 
    } 

} 

"123" является идентификатор документа документа Я создал сервер CouchBase с помощью интерфейса администратора

Как вы можете увидеть, что я сначала удалил базу данных (прокомментированная часть), чтобы убедиться, что в базе данных нет документа, а затем был запущен вышеупомянутый код репликации.

Ниже синхронизации шлюз конфигурационный файл

{ 
    "log":["CRUD+", "REST+", "Changes+", "Attach+"], 
    "interface":":4986", 
    "adminInterface":":14985", 
    "databases": { 
    "sync_gateway": { 
     "server":"http://172.16.25.100:8091", 
     "bucket":"sync_gateway", 
     "sync":` 
      function (doc) { 
      channel (doc.channels); 
     }`, 
     "users": { 
      "GUEST": { 
       "disabled": false, 
       "admin_channels": ["*"] 
      } 
     } 
    } 
    } 
} 

Я также хочу спросить, есть ли строка интерфейса или команды для доступа к CBL. Я в настоящее время использую CBL в Android Studio, так что я не знаю, как получить доступ к его пользовательский интерфейс или командную строку

Просто для информации, я могу передавать данные с CBL на CouchBase сервер

+0

Нам нужна ваша конфигурация шлюза синхронизации и код в CB lite, с помощью которого вы определяете, настраиваете и запускаете синхронизацию pull и push, чтобы дать какие-либо советы. – TAM

+0

Отредактировано мое сообщение. Пожалуйста, еще раз проверьте –

+0

Не выглядит плохо с первого взгляда. Однако у меня нет опыта выполнения синхронизации для гостевого пользователя с каналами = *. Появляется довольно небезопасно, например. любой из нас, читающих это, теперь получит доступ к вашей базе данных. Я всегда отключу гостя и работаю с обычным, зарегистрированным пользователем. Но это не может быть источником вашей проблемы. Что произойдет, если вы выполните этот код с помощью отладчика? Синхронизация не работает только в одном направлении или в обоих? – TAM

ответ

0

Мы можем решить выше вопрос путем затенения. Если я хочу синхронизировать свои данные с уже сделанным ведром для синхронизации шлюза, требуется теневое копирование. Подробнее о Shadowing here

Смежные вопросы