Bluemix:如何使用Replicator在Android中的Cloudant中插入JSON?

时间:2016-08-19 13:57:59

标签: android ibm-cloud cloudant

我发现很难进行这种简单的上传。我已经在互联网上使用了所有encontrandos教程,例如Bluelist和android-sync。我已经在服务中创建了一个数据库。我的代码如下:

MainActivity.java

package com.example.engenharia.replicator;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.cloudant.sync.datastore.BasicDocumentRevision;
import com.cloudant.sync.datastore.Datastore;
import com.cloudant.sync.datastore.DatastoreException;
import com.cloudant.sync.datastore.DatastoreManager;
import com.cloudant.sync.datastore.DocumentBodyFactory;
import com.cloudant.sync.datastore.DocumentException;
import com.cloudant.sync.datastore.DocumentRevision;
import com.cloudant.sync.datastore.MutableDocumentRevision;
import com.cloudant.sync.query.IndexManager;
import com.cloudant.sync.replication.ReplicatorBuilder;
import com.cloudant.sync.replication.Replicator;

import java.io.File;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;

public class MainActivity extends AppCompatActivity {

private static final String DATASTORE_MANGER_DIR = "data";
private Datastore DataStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     try {
        URI uri = new URI(my_uri);

        File path = getApplicationContext().getDir(DATASTORE_MANGER_DIR, Context.MODE_PRIVATE);

        DatastoreManager manager = new DatastoreManager(path.getAbsolutePath());

        DataStore = manager.openDatastore("banco0"); //banco0 is the DB created in Cloudant NoSQL service.

        // Create a replicator that replicates changes from the local
        // datastore to the remote database.
        Replicator replicator = ReplicatorBuilder.push().to(uri).from(DataStore).build();

        // Use a CountDownLatch to provide a lightweight way to wait for completion
        CountDownLatch latch = new CountDownLatch(1);

        Listener listener = new Listener(latch);

        replicator.getEventBus().register(listener);

        replicator.start();

        latch.await();

        replicator.getEventBus().unregister(listener);

        if(replicator.getState() != Replicator.State.COMPLETE){
            System.out.println("Error replicating TO remote");
            System.out.println(listener.error);
        } else {
            System.out.println(String.format("Replicated %d documents in %d batches",
                    listener.documentsReplicated, listener.batchesReplicated));
        }
    }catch (Exception e){
        e.printStackTrace();
    }

}

public DocumentRevision createDocument() {
    MutableDocumentRevision rev = new MutableDocumentRevision();
    rev.body = DocumentBodyFactory.create(HashMap());

    try {
        return DataStore.createDocumentFromRevision(rev);
    } catch (DocumentException e) {
        //throw new RuntimeException(e);
        e.printStackTrace();
        return null;
    }
}

public Map<String, Object> HashMap() {
    HashMap<String, Object> map = new HashMap<String, Object>();
    HashMap<String, String> map1 = new HashMap<String, String>();

    map1.put("Street", "121");
    map1.put("Street1", "12112");
    map1.put("Street123", "1211111");

    String[] array1 = new String[]{"Cloudant", "NoSQL", "JSON"};

    map.put("address", map1);
    map.put("description", "This is sample description");
    map.put("skills", array1);
    return map;
}
}

listener.java

package com.example.engenharia.replicator;

import com.cloudant.sync.notifications.ReplicationCompleted;
import com.cloudant.sync.notifications.ReplicationErrored;
import com.cloudant.sync.replication.ErrorInfo;
import com.google.common.eventbus.Subscribe;
import com.cloudant.sync.replication.ReplicatorBuilder;
import com.cloudant.sync.replication.Replicator;


import java.util.concurrent.CountDownLatch;

/**
 * Created by engenharia on 19/08/16.
 */
public class Listener {
    private final CountDownLatch latch;
    public ErrorInfo error = null;
    public int documentsReplicated;
    public int batchesReplicated;

    Listener(CountDownLatch latch) {
        this.latch = latch;
    }

    @Subscribe
    public void complete(ReplicationCompleted event) {
        this.documentsReplicated = event.documentsReplicated;
        this.batchesReplicated = event.batchesReplicated;
        latch.countDown();
    }

    @Subscribe
    public void error(ReplicationErrored event) {
        this.error = event.errorInfo;
        latch.countDown();
    }
}

执行此代码我有以下错误:

  

CouchException:错误:禁止,原因:server_admin访问是   此请求所需的statusCode:403,msg:null,cause:null

但我是管理员! 我该如何解决问题或解决方案是什么?

0 个答案:

没有答案