2

Я пытаюсь использовать CouchBase Lite для своего мобильного приложения. Я видел в учебнике couchbase, но он показывает, как добавить URL-адрес синхронизации для сервера walrus, а не сервера couchbase. Как настроить URL-адрес синхронизации для сервера couchbase.Как настроить URL-адрес синхронизации в шлюзе синхронизации couchbase для подключения к серверу couchbase

Ниже приводится код, который я использую, но не в состоянии поставить или получить данные с сервера couchbase

private URL createSyncURL(boolean isEncrypted){ URL syncURL = null; String host = "https://127.0.0.1"; String port = "4986"; bucketName = "sync_gateway"; try { syncURL = new URL(host + ":" + port + "/" + bucketName); } catch (MalformedURLException me) { me.printStackTrace(); } return syncURL; }

config.json файл для шлюза синхронизации ниже

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

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

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.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; 
    } 
    Document createdDocument = createDocument(database); 
    Log.d(TAG, "createdDocument=" + String.valueOf(createdDocument.getProperties())); 
    // retrieve the document from the database 
    Document retrievedDocument = database.getDocument(createdDocument.getId()); 
// display the retrieved document 
    Log.d(TAG, "retrievedDocument=" + String.valueOf(retrievedDocument.getProperties())); 
    updateDoc(database, createdDocument.getId()); 
    Document updatedDocument = database.getDocument(createdDocument.getId()); 
    Log.d(TAG, "updatedDocument=" + String.valueOf(updatedDocument.getProperties())); 
    try { 
     startReplications(); 
    } catch (CouchbaseLiteException e) { 
     e.printStackTrace(); 
    } 
    Log.d(TAG, "End Couchbase Events App"); 
    } 
    private void updateDoc(Database database, String documentId) { 
    Document document = database.getDocument(documentId); 
    try { 
     // Update the document with more data 
     Map<String, Object> updatedProperties = new HashMap<String, Object>(); 
     updatedProperties.putAll(document.getProperties()); 
     updatedProperties.put("eventDescription", "Everyone is invited!"); 
     updatedProperties.put("address", "123 Elm St."); 
     // Save to the Couchbase local Couchbase Lite DB 
     document.putProperties(updatedProperties); 
    } catch (CouchbaseLiteException e) { 
     Log.e(TAG, "Error putting", e); 
    } 
    } 
    private Document createDocument(Database database) { 
    // Create a new document and add data 
    Document document = database.createDocument(); 
    String documentId = document.getId(); 
    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("name", "Big Party"); 
    map.put("location", "My House"); 
    try { 
     // Save the properties to the document 
     document.putProperties(map); 
    } catch (CouchbaseLiteException e) { 
     Log.e(TAG, "Error putting", e); 
    } 
    Document document1 = database.createDocument(); 
    documentId = document1.getId(); 
    Map<String, Object> map1 = new HashMap<String, Object>(); 
    map1.put("name", "Yagyank"); 
    map1.put("location", "GGn"); 
    try { 
     // Save the properties to the document 
     document1.putProperties(map1); 
    } catch (CouchbaseLiteException e) { 
     Log.e(TAG, "Error putting", e); 
    } 
    Document document2 = database.createDocument(); 
    documentId = document2.getId(); 
    Map<String, Object> map2 = new HashMap<String, Object>(); 
    map2.put("name", "Farheen"); 
    map2.put("location", "GGn"); 
    try { 
     // Save the properties to the document 
     document2.putProperties(map2); 
    } catch (CouchbaseLiteException e) { 
     Log.e(TAG, "Error putting", e); 
    } 
    return document2; 
    } 
    private URL createSyncURL(boolean isEncrypted){ 
    URL syncURL = null; 
    String host = "127.0.0.1"; 
    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(!pull.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()); 
    }*/ 
    } 

} 

ответ

3

Вы не можете синхронизировать непосредственно на Couchbase Server. Вам нужно синхронизировать с Sync Gateway. Синхронизирующий шлюз может иметь два backend: Walrus (внутренняя память) и Couchbase Server.

С точки зрения вашего мобильного приложения бэкэнд не имеет значения. Вам нужно указать URL-адрес шлюза синхронизации. Предполагая, что шлюз синхронизации запущен на вашем локальном компьютере и что вы используете эмулятор android для тестирования своего приложения, URL-адрес должен быть http://10.0.2.2:5984/sync_gateway

+0

Я узнал об этом позже и попробовал с URL-адресом шлюза синхронизации, но все еще не УДАЧИ , Я могу вставить данные, используя http://developer.couchbase.com/documentation/mobile/1.2/develop/references/couchbase-lite/rest-api/document/put---db---doc-/index. html api, и это успешно, но с моим кодом Android, я не в состоянии это сделать. Я отредактировал вопрос и предоставил свой файл конфигурации и код андроида. –

+0

Использование http://127.0.0.1:4986/sync_gateway означает, что ваш синхронизирующий шлюз работает на вашем телефоне. Я предполагаю, что это не так. Если он запущен на вашей машине разработки, и вы используете эмулятор, то адрес должен быть http://10.0.2.2:4986/sync_gateway –

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