簡體   English   中英

如何使用 RxJava 發送字節 stream?

[英]How to send stream of bytes using RxJava?

有這樣的代碼可以完美地將字符串傳輸到服務器並讀取響應字符串。

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()。 我究竟做錯了什么?

你不應該在主線程中執行你的網絡請求

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM