2017-06-20 4 views
0

J'ai un projet avec CouchDB et couchbase-lite sur Android. J'ai un Activitiy, disons ReplicationActivity, où je montre un ProgressDialog tandis que le processus de réplication s'exécute, ce processus utilise environ 2 heures. Mon plan est lorsque le processus de réplication est terminé, l'application déplace l'utilisateur à MainActivity.
Le problème que j'ai est que l'application se déplace vers MainActivity avant que le processus est terminé, donc je n'ai pas toutes les données disponibles sur MainActivitySurveillance du processus de réplication sur CouchDB

Afin de surveiller le processus de réplication que je fais ceci:

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


       } 

Une idée de ce que je peux faire pour savoir quand le processus de réplication est terminé?

Répondre

1

Vous souhaitez examiner l'objet ChangeEvent transmis à l'écouteur.

Voici un exemple sur la façon de détecter une finition de réplication:

// 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)); 
} 

Vous pouvez trouver plus d'arrière-plan et la discussion du code dans this blog.