簡體   English   中英

Android 嘗試獲取要發送到 socket.io 的字符串時出現 $CalledFromWrongThreadException 錯誤

[英]Android $CalledFromWrongThreadException error when trying to get string to send to socket.io

我正在嘗試從 EditText 獲取一個字符串並使用 socket.io 發出它,但是,每當它運行時,我都會收到錯誤 android.view.ViewRootImpl$CalledFromWrongThreadException。

我嘗試了什么:

System.out.println("current status : " + socket.connected());
EditText send_message = findViewById(R.id.send_message);
String message = send_message.getText().toString();
MainActivity.this.runOnUiThread(() -> socket.emit("send_message", send_message.getText().toString()));

發生了什么:

E/AndroidRuntime: FATAL EXCEPTION: EventThread
    Process: dev.atomtables.atomchat, PID: 3719
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)
        at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:874)
        at android.view.View.requestLayout(View.java:17476)
        at android.view.View.requestLayout(View.java:17476)
        at android.view.View.requestLayout(View.java:17476)
        at android.view.View.requestLayout(View.java:17476)
        at android.view.View.requestLayout(View.java:17476)
        at android.widget.ScrollView.requestLayout(ScrollView.java:1483)
        at android.view.View.requestLayout(View.java:17476)
        at android.view.ViewGroup.addView(ViewGroup.java:3784)
        at android.view.ViewGroup.addView(ViewGroup.java:3727)
        at android.view.ViewGroup.addView(ViewGroup.java:3700)
        at dev.atomtables.atomchat.MainActivity.onReceiveMessage(MainActivity.java:279)
        at dev.atomtables.atomchat.MainActivity.lambda$onCreate$4$dev-atomtables-atomchat-MainActivity(MainActivity.java:98)
        at dev.atomtables.atomchat.MainActivity$$ExternalSyntheticLambda5.call(D8$$SyntheticClass)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.client.Socket.onevent(Socket.java:363)
        at io.socket.client.Socket.onpacket(Socket.java:307)
        at io.socket.client.Socket.access$100(Socket.java:19)
        at io.socket.client.Socket$2$2.call(Socket.java:92)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.client.Manager.ondecoded(Manager.java:361)
        at io.socket.client.Manager.access$1200(Manager.java:22)
        at io.socket.client.Manager$5.call(Manager.java:355)
        at io.socket.parser.IOParser$Decoder.add(IOParser.java:103)
        at io.socket.client.Manager$2.call(Manager.java:331)
        at io.socket.emitter.Emitter.emit(Emitter.java:117)
        at io.socket.engineio.client.Socket.onPacket(Socket.java:556)
        at io.socket.engineio.client.Socket.access$1000(Socket.java:29)
        at io.socket.engineio.client.Socket$5.call(Socket.java:335)

問題不在這里。 Emit 使其發送消息。 該消息在您的套接字庫選擇的線程上發出。 所以你在套接字的線程上調用 MainActivity.onRecieveMessage 。 您需要 onRecieveMessage 中的 runOnUiThread,而不是此處。 從任何線程發出都很好。

暫無
暫無

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

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