Couch Db和Couch Base Lite将数据同步到Android应用程序,列表视图无法使用LiveQuery进行刷新

时间:2017-12-06 05:55:53

标签: java android couchdb couchbase-lite couchbase-sync-gateway

  

" 我是couchDB新手并尝试使用CouchSync Gateway将数据从CouchDB提取到我的设备。我实现了80%的成功率,10倍,8倍我的数据同步和   我在其他设备上获得了数据,但我可以提高到100%。是他们的任何方式或任何可以帮助我的设置。"

先谢谢了。

以下是我正在使用的代码部分。

private void startLiveQuery(View viewItems) {

    if (liveQuery == null) {

        liveQuery = viewItems.createQuery().toLiveQuery();
        liveQuery.addChangeListener(new LiveQuery.ChangeListener() {
            @Override
            public void changed(final LiveQuery.ChangeEvent event) {
                    Log.d("DataChang","true");
                    Log.d("DataError",event.getError()+"");

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                        empAdapter.clear();
                        for (Iterator<QueryRow> it = event.getRows(); it.hasNext(); ) {
                            empAdapter.add(it.next());
                        }
                        empAdapter.notifyDataSetChanged();
                        empAdapter.notifyAll();
                        }catch (Exception e){
                                e.printStackTrace();
                        }
                        tv_datasize.setText("Record Count : "+event.getRows().getCount()+"");
                    }
                });

            }
        });
        liveQuery.start();
    }
}
  

我在initCBLite()

中调用此方法
private void initCBLite() throws Exception {

    manager = new Manager(new AndroidContext(getApplicationContext()), Manager.DEFAULT_OPTIONS);
    DatabaseOptions options = new DatabaseOptions();
    options.setCreate(true);
    database = manager.openDatabase(DATABASE, options);

    viewItems = database.getView(String.format("%s/%s", designDocName, byDateViewName));

    viewItems.setMap(new Mapper() {
        @Override
        public void map(Map<String, Object> document, Emitter emitter) {
            Object bydate = document.get(MyDatabase.EMPLOYEENAME);
            if (bydate != null) {
                emitter.emit(bydate, document);

            }
        }
    }, "2.0");


    initItemListAdapter();

    startLiveQuery(viewItems);

    startSYNC();
}
  

我在OnCreate()中调用initCBLite()方法

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cblite_report);
    listView = findViewById(R.id.lv_cbliteReport);
    tv_datasize = findViewById(R.id.tv_size);
    myDatabase = new MyDatabase(CBLiteReport.this);
    db = myDatabase.getWritableDatabase();
    try {
        initCBLite();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

Couchbase Lite最初是为了与CouchDB同步而构建的,但是大约3年前,Couchbase创建了一个名为Sync Gateway(也是Apache2许可)的项目,这是Couchbase Lite官方支持的后端。 Couchbase Lite的所有测试和质量保证都是针对Sync Gateway完成的。

如果您有使用CouchDB的要求,Couchbase Lite 1.4.x预计会对它起作用,但不适用于开发人员预览中的Couchbase Lite 2.x.

您使用的是哪个版本的Couchbase Lite?