关于Android如何在子线程中更新UI

之前老师一直有提到这个不过一直在学其他的东西就没怎么注意

今天写Room框架增删改查的时候在查询这一步实时更新ui卡壳了,数据一显示程序直接崩溃

查了一下发现是不能直接在子线程里更新ui的

然后用了Handler异步机制的方法处理

在主线程添加

private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    // 在这里可以进行UI操作
                    tvResult.setText(sb.toString());
                    break;
                default:
                    break;
            }
        }
    };

在这里插入图片描述
子线程这样写

public void query() {
        new Thread() {
            @Override
            public void run() {
                List<Student> students = studentDao.getAll();
                sb = new StringBuffer();
                for (Student student : students) {
                    Log.d("TAG", String.format("query:user[%d,%s,%s,%s]", student.sid, student.sno, student.sname, student.sex));
                    sb.append(student.sid).append("\t\t\t").append(student.sno).append("\t\t\t")
                            .append(student.sname).append("\t\t\t").append(student.sex).append("\r\n");
                }
//                tvResult.setText(sb.toString());
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            }
        }.start();

    }

在这里插入图片描述
记录一下,估计没人看得懂,毕竟我什么都菜的一笔,手动狗头

猜你喜欢

转载自blog.csdn.net/m0_46108436/article/details/106586612