![](/img/trans.png)
[英]How to create an Observable sequence of bytes from an input stream in RxJava
[英]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.