【问题标题】:Error when using handlers Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage使用处理程序时出错尝试调用虚拟方法'boolean android.os.Handler.sendMessage
【发布时间】:2017-03-21 21:36:59
【问题描述】:

我得到了一个

E/AndroidRuntime: FATAL EXCEPTION

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage(android.os.Message)' on a null object reference at com.example.android.slidenerd180handler.MainActivity$MyThread.run(MainActivity.java:37)

我不知道为什么它不起作用,我按照 youtube 上的教程视频中所说的所有内容进行了 android 处理程序,但它仍然不起作用。

第 37 行是handler.sendMessage(message);

    class MyThread implements Runnable {


    @Override
    public void run() {
        for(int i =0;i<100;i++){
            Message message = Message.obtain();
            message.arg1=i;
            handler.sendMessage(message);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

【问题讨论】:

标签: android handler sendmessage


【解决方案1】:

如果您在发送消息之前未确保 Handler 已初始化,则它不起作用。

为此,您可以让线程在发送消息之前休眠几毫秒(例如 2 毫秒)。事实上,当UIThread 运行thread.start() 时,辅助线程(实现Runnable 的线程)启动。

run() 方法中的循环开始,指令handler.sendMessage(message)UIThread 可以读取指令handler = new Handler() 之前由辅助线程执行。

您不能确定它是否总是以这种方式发生,因此您必须确保首先初始化 Handler。您可以将Thread.sleep(100); 放入辅助线程的run() 部分。

【讨论】:

  • 请不要写“点个赞”之类的东西,这是对网站宗旨的诋毁
【解决方案2】:

此错误表示您正在尝试发送一条为空的消息。换句话说,消息是空的。检查您从何处获取消息并确保消息不会为空。

在发送消息之前,您应该添加一个 if 语句。尝试用以下代码替换您的代码:

class MyThread implements Runnable {

@Override
public void run() {
    for(int i =0;i<100;i++){
        Message message = Message.obtain();
        if(message != null){
            message.arg1=i;
            handler.sendMessage(message);
        }
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    您在初始化处理程序之前启动 MyThread(我猜来自活动的 onCreate())。在 MyThread 执行之前初始化处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 2021-08-13
      • 2018-07-24
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多