微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能在 MediaPipe addPacketCallback 中设置 EditText 的文本

如何解决不能在 MediaPipe addPacketCallback 中设置 EditText 的文本

我在 Android 中使用 MediaPipe获取图表的输出,并将该输出设置为 EditText 的文本。代码如下:

editText.setText("hello world".toString());
 processor.addPacketCallback(
          OUTPUT_STREAM_NAME,(packet) -> {
              String output = PacketGetter.getString(packet);
                  editText.setText("hello world 1".toString());
                  //editText.setText(output.toString());
              Log.d(TAG,"[TS:" + packet.getTimestamp() + " : " + ouput);
          });

回调外部的 setText() 工作正常,但回调内部从未设置,每当我尝试选择 EditText 时都会发生以下异常:

java.lang.indexoutofboundsexception: setSpan (-1 ... -1) starts before 0

解决方法

因此,事实证明 addPacketCallback() 在工作线程上调用,并且在那里更改 UI 需要在 UI 线程上显式运行它

editText.setText("hello world".toString());
processor.addPacketCallback(
        OUTPUT_STREAM_NAME,(packet) -> {
            String output = PacketGetter.getString(packet);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    editText.setText("hello world 1");
                }
            });
            //editText.setText(output.toString());
            Log.d(TAG,"[TS:" + packet.getTimestamp() + " : " + ouput);
        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。