Получение сообщения об ошибке «Соединение WebSocket закрыто одноранговым узлом» при попытке использовать Replicator с Couchbase lite 2.7 Android - PullRequest
1 голос
/ 04 мая 2020

Этот класс предоставляет базу данных couchbase lite и репликатор в режиме PUSH_AND_PULL для отправки и получения данных из 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)
        }
    }

 }

В этой части кода я запускаю репликатор, но я получил ошибку: {Repl # 16} Ошибка LiteCore: ошибка WebSocket 1001 «Соединение WebSocket закрыто узлом»

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

Что не так? или я что-то пропустил! К вашему сведению: я пользуюсь редакцией сообщества, спасибо!

1 Ответ

0 голосов
/ 11 мая 2020

Чтобы устранить проблему, я должен получить IP-адрес и указать его в файловой конфигурации xml для управления поддержкой открытого текста.

Согласно https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

...