监视CouchDB上的复制过程

监视CouchDB上的复制过程,couchdb,couchbase-lite,Couchdb,Couchbase Lite,我有一个关于Android上CouchDB和couchbase lite的项目。 我有一个activity,比如说ReplicationActivity,当复制过程运行时,我会显示一个ProgressDialog,这个过程大约需要2个小时。 我的计划是当复制过程完成时,应用程序将用户移动到MainActivity。 我遇到的问题是,在流程完成之前,应用程序会移动到MainActivity,因此我没有MainActivity上的所有可用数据 为了监视复制过程,我正在执行以下操作: Couchbas

我有一个关于Android上CouchDB和couchbase lite的项目。 我有一个activity,比如说ReplicationActivity,当复制过程运行时,我会显示一个ProgressDialog,这个过程大约需要2个小时。 我的计划是当复制过程完成时,应用程序将用户移动到MainActivity。 我遇到的问题是,在流程完成之前,应用程序会移动到MainActivity,因此我没有MainActivity上的所有可用数据

为了监视复制过程,我正在执行以下操作:

CouchbaseManager.getInstance().addProgressListener(new Replication.ChangeListener() {
        @Override
        public void changed(Replication.ChangeEvent event) {

            if (CouchbaseManager.getInstance().getReplicationProgress() > 0 &&
                    CouchbaseManager.getInstance().getReplicationTotal() > 0 &&
                    CouchbaseManager.getInstance().getReplicationTotal() ==
                    CouchbaseManager.getInstance().getReplicationProgress() &&
                    CouchbaseManager.getInstance().getPullwork().getStatus() !=
                            Replication.ReplicationStatus.REPLICATION_ACTIVE &&
                    CouchbaseManager.getInstance().getPushwork().getStatus() !=
                            Replication.ReplicationStatus.REPLICATION_ACTIVE &&
                    CouchbaseManager.getInstance().getPullmaster().getStatus() !=
                            Replication.ReplicationStatus.REPLICATION_ACTIVE) {
                if (mProgressDialog != null && mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    Log.i("usercontroller", "MOVING TO MAIN ACTIVITY");


                }
您知道我可以做些什么来知道复制过程何时完成吗?

您想查看传递给侦听器的ChangeEvent对象

下面是一个关于如何检测复制完成的示例:

// Replication.ChangeListener
@Override
public void changed(Replication.ChangeEvent changeEvent) {
  if (changeEvent.getError() != null) {
    Throwable lastError = changeEvent.getError();

    // React to the error

    return;
  }

  if (changeEvent.getTransition() == null) return;

  ReplicationState dest = changeEvent.getTransition().getDestination();

  replicationActive = ((dest == ReplicationState.STOPPING || dest == ReplicationState.STOPPED) ? false : true);

  stateListeners.forEach(listener -> listener.onChange(replicationActive));
}
您可以在中找到更多关于该代码的背景和讨论