如何从静态函数向处理程序发送消息?

Mic*_*yes 5 android

我知道,这又是一个重复的问题,但我的情况是不同的问题.

我有一个带有静态函数和处理程序的类abc.之前我无法从静态函数调用处理程序.然后我用静态函数搜索Access非静态函数,发现一个解决方案是创建一个类和访问非静态变量的实例.但现在,为什么,我得到这个错误.

E/AndroidRuntime(13343): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

public class abc
 {    
    static public void Instantiate()
    {
         abc xyz = new abc();
         xyz.handler.sendEmptyMessage(1);      **//GETTING ERROR IN THIS LINE**
    }

    public Handler handler = new Handler() 
        {
                public void handleMessage(Message msg) 
                {
                        switch (msg.what)
                        {
                        }
                 }
        }

}
Run Code Online (Sandbox Code Playgroud)

我的问题:如何从静态函数向处理程序发送消息?

Thankx.

She*_*tib 7

检查你这样做的地方:

abc.Instantiate();
Run Code Online (Sandbox Code Playgroud)

并替换它

runOnUiThread(new Runnable() {

    @Override
    public void run() {
        abc.Instantiate();
    }
});
Run Code Online (Sandbox Code Playgroud)

我希望你从一个活动中调用它

一些解释(引用 bicska88):)


导致问题的原因与您Handler从静态函数中向对象发送消息的事实无关.问题是您从未调用的线程向处理程序发送消息Looper.prepare()(如错误消息所示,该线程没有message loop).这可以通过显式调用Looper.prepare()before-while或通过在UIThread上运行代码来解决.