2016-06-28 8 views
1

私のアプリケーションでIBM Cloudantを使用しています。私のリモートDBに接続するために、私はこのライブラリを使用しました:https://github.com/cloudant/sync-android 。 Androidで連続レプリケーションを有効にしようとしていますが、有効にする方法を見つけることができません。これは私が使用しているコードです:Cloudant continuos replication Android

File path = getApplicationContext().getDir("datastores", Context.MODE_PRIVATE); 
DatastoreManager manager = new DatastoreManager(path.getAbsolutePath()); 

try { 
     Datastore ds = manager.openDatastore("mydatabase"); 
     IndexManager indexManager = new IndexManager(ds); 

    URI uri = new URI(myuri); 
    // Create a replicator that replicates changes from the remote 
    // database to the local datastore. 
    Replicator replicator = ReplicatorBuilder.pull().from(uri).to(ds).build(); 
    // Use a CountDownLatch to provide a lightweight way to wait for completion 
    CountDownLatch latch = new CountDownLatch(1); 
    Listener listener = new Listener(latch); 
    replicator.getEventBus().register(listener); 
    replicator.start(); 
    latch.await(); 
    replicator.getEventBus().unregister(listener); 
    if (replicator.getState() != Replicator.State.COMPLETE) { 
     System.out.println("Error replicating FROM remote"); 
     System.out.println(listener.error); 
    } 

    } catch (DatastoreException datastoreException) { 

    System.err.println("Problem opening datastore: "+datastoreException); 

    } catch (Exception documentException) { 

    System.err.println("Problem: "+documentException); 
} 

をし、リスナーは次のように定義されています

CBLReplication *pullReplication = [_cblDatabase createPullReplication:synchronizationURL]; 

//THIS IS THE PART THAT I WOULD LIKE TO HAVE IN ANDROID 
pullReplication.continuous = YES; 

[pullReplication start]; 

付:

private class Listener { 
    private final CountDownLatch latch; 
    public ErrorInfo error = null; 
    public int documentsReplicated; 
    public int batchesReplicated; 

    Listener(CountDownLatch latch) { 
     this.latch = latch; 
    } 
    @Subscribe 
    public void complete(ReplicationCompleted event) { 
     this.documentsReplicated = event.documentsReplicated; 
     this.batchesReplicated = event.batchesReplicated; 
     latch.countDown(); 
    } 
    @Subscribe 
    public void error(ReplicationErrored event) { 
     this.error = event.errorInfo; 
     latch.countDown(); 
    } 
} 

は、IOSでは、私は同様のコードを使用しています私のコード、リモートdbはデバイス上でローカルに複製されますが、2つのdbは連続的に同期されません。クラウドコンソール上で何かを修正すると、変更はデバイスに伝播されません(代わりにiOSでは正しく同期されます)。

Androidにもこのオプションを追加する方法はありますか?

答えて

1

Cloudant Sync(アンドロイドで使用しているライブラリ)は、バッテリの寿命に影響するため、継続的な複製をサポートしていません。本当に連続レプリケーションが必要な場合は、public void complete(ReplicationCompleted event)メソッドでレプリケーション完了を通知されたら、startメソッドを使用してレプリケータを再起動する必要があります。

関連する問題