java - Android,如何在通过蓝牙发送数据时更新UI

标签 java android

我的应用程序上有一个按钮,当我单击该按钮时(将我带到图片库以获取结果)。当我选择图片时,我会得到很好的结果,然后开始使用独立方法传输图像。

问题是 UI 卡在图库屏幕上,然后屏幕变暗,直到传输完成...我尝试使用 run on ui 更新 UI,但它不起作用...

while ((bytesRead = bis.read(buf, 0, buf.length)) != -1)
        {
            BT_data_out.write(buf, 0, bytesRead);
            if(fill++ > 2) {BT_data_out.flush(); fill = 0;};
            prgrss += bytesRead;
            final String done = Integer.toString(prgrss);
            final String total = Integer.toString(fileL);

            if(update_rate > (50000/bufSize) ) {
                update_rate = 0;
                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        mTextMISC.setText(done+"/"+total+" B");
                    }
                });

            }
            update_rate++;
        }

传输完成后我可以看到 UI 线程的最终效果,但所有中间更新都看不到。

最佳答案

您本身无法从辅助线程对主 UI 线程进行更新。为此,您必须附加 Handler到主 UI 线程并从辅助线程向其发布消息。或者,您可以使用 AsyncTask这是 Android 的实现,使使用线程和处理程序变得更加容易。

关于java - Android,如何在通过蓝牙发送数据时更新UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469475/

相关文章:

java - 如何更新 JFreeChart 中的图表?

java - 单一注销不适用于 Shibboleth IdP

Java 表格单元格渲染器仅在第一次单击后才激活

java - 如何检测顶级合法搜索引擎机器人?

android - 如何在 LinearLayout 单元格中对齐两个 TextView?

android - 当上下文被破坏时,我们不能通过使用 Intent 来启动一个新的 Activity 吗?我对吗?

java - Tomcat 因大量请求而挂起

android - 如何在 Firestore 中一次创建/更新多个文档

java - 如何在线程结束时执行函数?

java - 如何在同一个 pom.xml 中使用 selendroid 和 seleniumhq ?