2017-06-20 52 views
0

我有一个项目CouchDBcouchbase-liteAndroid。 我有一个Activitiy,可以说ReplicationActivity,我在复制过程运行时显示ProgressDialog,此过程使用大约2个小时。 我的计划是当复制过程完成时,应用程序将用户移动到MainActivity。
我的问题是,应用程序移动到MainActivity过程完成前,所以我对MainActivity监控CouchDB上的复制过程

可并不是所有的数据。为了监测复制过程我这样做:

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"); 


       } 

有关我可以做什么以了解复制过程何时完成的任何想法?

回答

1

你想看看传递给侦听器的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)); 
} 

你可以找到更多的代码的背景和讨论this blog