java - 通过接收来自处理程序的消息来更新 UI

标签 java android multithreading handler

我想从我的处理程序(从服务)接收消息,并将文本设置为 UI 中的 editext。我使用服务内的处理程序将消息从后台线程发送到主线程。我在后台线程中创建了一个处理程序,在主线程中(在构造函数中)创建了一个处理程序。现在我想将此消息发送到我的 MainActivity 并更新 UI。我有以下代码。

MyService.java

public class myLocalThread extends Thread {

@SuppressLint("HandlerLeak")
myLocalThread() throws IOException {

mhandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case MSG:

        DeviceMessageStatus statusObject = (DeviceMessageStatus) msg.obj;
        statusClass = statusObject.getClass();
        try {
            statusField = statusClass.getField("screening_information");
            statusFieldValue = statusField.get(statusObject);
        Log.i("TAG", "Message OBJECT :" + statusFieldValue);
    }

  };
 }
}

我将消息从后台线程转发到主线程,但在服务内部。如何更新 MainActivity 中的 UI。我应该创建另一个处理程序吗?这是我所做的

MainActivity.java
Object statusFieldValue;
onCreate(Bundle savedInstanceState){
    number = (EditText) findViewById(R.id.dialpad);
    number.setText((Integer) statusFieldValue);
    Log.i("RL_RX", "onCreate: " + statusFieldValue);
}

这会引发 nullPointerError Activity 无法启动。如何检索 UI 线程的消息队列中的消息。我在这里缺少什么?

最佳答案

你声明了一个名为“mhandler”的处理程序,但是在mhandler中,你仍然使用mhandler来发送消息,这是一个无限循环???

关于java - 通过接收来自处理程序的消息来更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57356316/

相关文章:

c# - 为什么计数器在线程池中不起作用

java - 在java swing上从子框架管理父框架

java - java中的复杂正则表达式

java - Apache POI写图文excel

android - 返回到 ActionBar 主页单击上的第一个 Activity,但只有在它被销毁后才重新创建它 : which flags should I use?

android - 如何知道哪个 View 具有当前焦点

java - Android登录应用程序未登录用户

xcode - 线程 1 : breakpoint 7. 3 Xcode 7 swift

java - java 应用程序连接到 MSSQL 数据库时出现 : com. microsoft.sqlserver.jdbc.SQLServerException 问题

java - Android(在 Scala 中): StackOverflowError depends on when to start a thread?