2017-09-25 60 views
0

我正在使用couchbase lite的複製拉動態通道。 如果我使用單個複製對象,我需要先停下來,然後開始。如果拉正在運行,那就是問題了。如何解決這個問題。我將如何知道拉運行。任何方式來創建多個複製對象?如果複製正在運行,如何添加通道?

+0

爲什麼你需要停止複製?您是否按頻道過濾複製品?否則,你不應該需要。在運行時停止複製有什麼問題?你可以有多個複製對象,但我會確保你需要它們。 – Hod

+0

我得到解決方案,重新啓動,繼續兩個渠道。無需停止,只需更改設置並重新啓動。 –

回答

0

使用複製ChangeListener。以下是一個監視複製停止的示例。

public class DBHelper implements Replication.ChangeListener { 
    private boolean replicationActive = false; 
    private List stateListeners = new ArrayList<>(); 
    ... 

    public interface ReplicationStateListener { 
    void onChange(boolean isActive); 
    } 

    public void startReplication(URL gateway, boolean continuous) { 
    ... 

    pushReplication.addChangeListener(this); 
    pushReplication.start(); 
    } 

    public void stopReplication() { 
    ... 
    } 

    public void addReplicationStateListener(ReplicationStateListener listener) { 
    stateListeners.add(listener); 
    } 

    public void removeReplicationStateListener(ReplicationStateListener listener) { 
    stateListeners.remove(listener); 
    } 

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

你可以在這裏閱讀更多詳細信息:https://blog.couchbase.com/determining-status-replication-couchbase-lite/

相關問題