gpt4 book ai didi

java - 有人可以修复我的 CalledFromWrongThreadException 吗?

转载 作者:行者123 更新时间:2023-12-02 08:14:16 25 4
gpt4 key购买 nike

我有一个 Activity 启动然后创建一个新的 NetworkHandler 实例,在 NetworkHandler 中我在一个新线程上运行它,这样 UI 线程就不会被卡住。 NetworkHandler 有一个 run() 方法,该方法位于 while((message = reader.readLine())!=null) 上。 reader 是 BufferedReader,message 是 String。然后 UI 线程开始进行布局。当用户导航到登录屏幕并单击登录按钮时,客户端会向服务器发送一条消息并接收返回的信息,即用户名/密码组合是否正确。然后,执行流读取的线程(while 循环)会尝试更改布局,以便在登录成功或哎呀你搞砸了屏幕时弹出游戏屏幕。它给了我这个恼人的异常,并且它不会改变布局。我以前在 android 中遇到过这个问题,我不明白为什么你必须从 UI 线程调用 View 更改。这对我来说没有意义。在Java中,我知道你可以做到这一点,我已经为我的计算机制作了大约一百个应用程序,并且我知道java没有这个问题。有人可以解释一下吗?感谢所有相关答案!

最佳答案

当您要更新布局时,使用Handler.post(...)切换到UI线程。像这样:

private Handler myHandler;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myHandler = new Handler();
}

public void loadInBackround() {
while(...) {
// do stuff
}
final result = ....;
myHandler.post(new Runnable() {
@Override
public void run() {
// update the layout with data from 'result'
...
}
});
}

请注意,结果具有 final 修饰符 - 从 Runnable 内部访问它是必需的。另请注意,处理程序本身必须在 UI 线程上创建,例如在onCreate中。

关于java - 有人可以修复我的 CalledFromWrongThreadException 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6738769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com