我正在尝试将CouchBase Lite用于我的移动应用。我在couchbase教程中看到过,但它显示了如何为walrus服务器而不是couchbase服务器添加同步URL。如何为couchbase服务器设置同步URL。
以下是我正在使用但无法从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": ["*"]
}
}
}
}
}
以下是Android应用程序代码
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());
}*/
}
}
答案 0 :(得分:3)
您无法直接与Couchbase服务器同步。您必须与Sync Gateway同步。 Sync Gateway可以有两个后端:Walrus(内存后端)和Couchbase Server。
从您的移动应用程序角度来看,后端并不重要。您需要提供同步网关URL。假设Sync Gateway在您的本地计算机上运行,并且您使用Android模拟器测试您的应用程序,则URL应为http://10.0.2.2:5984/sync_gateway