【问题标题】:How to send stream of bytes using RxJava?如何使用 RxJava 发送字节流?
【发布时间】:2021-01-17 17:10:41
【问题描述】:

有这样一段代码,可以完美的将一个字符串传输到服务器并读取响应字符串。

val thread = Thread {
        try {
            val port = 8888
            println("Try to open connection:$port")
            val socket = Socket("192.168.0.104", port)
            println("Connection is created")
            val pw = PrintWriter(socket.getOutputStream(), true)
            val br = BufferedReader(InputStreamReader(socket.getInputStream()))
            pw.println("Hello from client 1")
            Log.e("Server answer", br.readLine())
            pw.close()
            br.close()
            socket.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    thread.start()

我正在尝试使用 RxJava 做同样的事情

fun connectToServer() {
    val TAG = "Server answer"
        connectToServerWrapper()
            .observeOn(Schedulers.io())
            .subscribeBy (onSuccess = {
                Log.e(TAG, it)
            }, onError = {
                Log.e(TAG, it.toString())
            })
            .addTo(compositeDisposable)
}

fun connectToServerWrapper(): Single<String> {
    return Single.create { emitter ->
        val port = 8888
        println("Try to open connection:$port")
        val socket = Socket(SERVER_IP, port)
        println("Connection is created")
        val pw = PrintWriter(socket.getOutputStream(), true)
        val br = BufferedReader(InputStreamReader(socket.getInputStream()))
        pw.println("Hello from client 1")
        emitter.onSuccess(br.readLine())
        pw.close()
        br.close()
        socket.close()
    }
}

Android.os.NetworkOnMainThreadException 出现在 onError() 中。我做错了什么?

【问题讨论】:

    标签: java android kotlin rx-java rx-java2


    【解决方案1】:

    你不应该在主线程中执行你的网络请求

    fun connectToServer() {
        val TAG = "Server answer"
            connectToServerWrapper()
                .subscribeOn(Schedulers.io())
                .subscribeBy (onSuccess = {
                    Log.e(TAG, it)
                }, onError = {
                    Log.e(TAG, it.toString())
                })
                .addTo(compositeDisposable)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多