オンラインと同じようにオフラインで機能するように、CouchDBをAndroidと同期させようとしています.continues(true/false)がこれを実現する方法であることを理解しています。しかし、実際に実行時に何らかの方法で変更する方法はありますか? CONNECTIVITY_SERVICE がある場合は BroadcastReciever をリッスンし、それに応じて .continues() の値を設定することを考えていますが、それを機能させることはできません...何か提案はありますか?
protected void startEktorp() {
httpClient = new TouchDBHttpClient(server);
dbInstance = new StdCouchDbInstance(httpClient);
HamsterSyncEktorpAsyncTask startupTask = new HamsterSyncEktorpAsyncTask() {
@Override
protected void doInBackground() {
// create a local database
dbConnector = dbInstance.createConnector(DATABASE_NAME, true);
}
@Override
protected void onSuccess() {
// Create the query and get the results
queryDB();
// Start doing the replications!
startReplications();
}
};
startupTask.execute();
}
public synchronized void queryDB() {
ViewQuery viewQuery = new ViewQuery()
.designDocId("_design/" + dDocName).viewName(viewName)
.reduce(false).includeDocs(true);
ViewResult viewResult = dbConnector.queryView(viewQuery);
Log.v("SUCCESS", viewResult.getRows().toString());
notifyHandlers(viewResult);
}
/**
* Replicates the database from server to the phone and vice versa.
*/
public void startReplications() {
// pull this database to the test replication server
pullCommand = new ReplicationCommand.Builder().source(DATABASE_PATH)
.target(DATABASE_NAME).continuous(true).build();
pushCommand = new ReplicationCommand.Builder().source(DATABASE_NAME)
.target(DATABASE_PATH).continuous(true).build();
HamsterSyncEktorpAsyncTask pushReplicaton = new HamsterSyncEktorpAsyncTask() {
@Override
protected void doInBackground() {
dbInstance.replicate(pullCommand);
ReplicationStatus status = dbInstance.replicate(pushCommand);
Log.e(TAG, status.getSessionId().toString());
}
};
pushReplicaton.execute();
}
また、レプリケーションが実際に何か新しいものを送信/取得したかどうかを知り、データベース内のすべてのドキュメントを表示するアプリのリストビューを更新する方法があるかどうかも疑問に思っています (queryDB() 関数)?