1

This class provide the couchbase lite database and the replicator in mode PUSH_AND_PULL to send and receive data from sync_gateway

class CouchBaseLiteManager(private val context: Context) {
    private val NAME_DB = "db"
    private val REMOTE_URI = "ws://localhost:4984/db"
    private val user = "..."
    private val password = "..."
    private lateinit var configuration: DatabaseConfiguration
    private lateinit var mDatabase: Database
    private lateinit var mReplicator: Replicator
    private lateinit var mReplicatorPush: Replicator
    private lateinit var mReplicatorPull: Replicator
    init {
        instantiate()
        createDatabase()
        instantiateReplicator()
        instantiateReplicatorPush()
        instantiateReplicatorPull()
    }

    fun getDatabase(): Database = this.mDatabase!!
    fun getDatabaseName(): String = this.NAME_DB
    fun getReplicatorPush(): Replicator = this.mReplicatorPush

    private fun instantiate() {
        // Initialize the Couchbase Lite system
        CouchbaseLite.init(context)
    }

    private fun createDatabase(){
        // Get the database (and create it if it doesn’t exist).
        configuration = DatabaseConfiguration()
        mDatabase = Database(NAME_DB, configuration)
    }

    private fun instantiateReplicatorPush() {
        var uri:URI ? = null
        try {
            uri = URI(REMOTE_URI)
        }catch (c: CouchbaseLiteException) {
            c.printStackTrace()
        }
        uri?.let {
            val endpoint = URLEndpoint(it)
            val config = ReplicatorConfiguration(mDatabase,endpoint)
            config.replicatorType = CustomReplicatorType.getPushAndPull()
            config.isContinuous = true
            config.authenticator = BasicAuthenticator(user,password)
            //send to remote Endpoint
            config.pushFilter = ReplicationFilter { document, flags ->
                true
            }
            config.setPullFilter { document, flags ->
                true
            }
            mReplicatorPush = Replicator(config)
        }
    }

 }

In this portion of code I start the replicator but I got the error: {Repl#16} Got LiteCore error: WebSocket error 1001 "WebSocket connection closed by peer"

    fun test_couchbase_lite() {
        val manager = CouchBaseLiteManager(context)
        val db = manager.getDatabase()


        Injection.getReplicatorPush().start()
        Injection.getReplicatorPush().addChangeListener(object: ReplicatorChangeListener {
            override fun changed(change: ReplicatorChange) {
                Log.d("debug","replicator push and pull change !!!!! *")
                Log.d("debug","${change.status} -")

                if (change.replicator.status.activityLevel == CustomReplicatorType.getIDLE()) {
                    Log.d("debug", "Scheduler Completed");
                }
                if (change.replicator.status.activityLevel == CustomReplicatorType.getStopped()
                    || change.replicator.status.activityLevel == CustomReplicatorType.getOffline()) {
                    Log.d("debug", "ReplicationTag Stopped");
                }
            }
        })
    }

What is wrong ? or I missed something ! FYI: I use the community edition thanks !

Malcom
  • 283
  • 3
  • 11
  • I'm no expert, but it looks like you're trying to connect to localhost, from your Android app? This would imply that Sync Gateway is running on the same device as the android app? Even if you're running an emulator, I don't think that would work (unless you have some sort of port forwarding or proxy or something)? – Matthew Groves May 04 '20 at 18:36

1 Answers1

0

To fix the issue, I have to get the IP address and put it in the xml file network configuration to manage cleartext support.

According to https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

Malcom
  • 283
  • 3
  • 11
  • This is documented in the Couchbase documentation, here: https://docs.couchbase.com/couchbase-lite/2.7/java-android.html#starting-a-replication – G. Blake Meike May 28 '20 at 20:28