无法从Handler类型对非静态方法sendEmptyMessage(int)进行静态引用

时间:2011-07-01 16:15:12

标签: java android android-activity handler

我有一个错误“无法从Handler类型中对非静态方法sendEmptyMessage(int)进行静态引用”

如何解决?我认为这是一个问题,我这样做的课程不是一项活动吗?

        new Thread() {
            public void run() {
            try {

                    List<Sail> sails = searchSails();

                    selectSailIntent.putParcelableArrayListExtra(
                            Constant.SAILS, new ArrayList<Sail>(sails));

                    getContext().startActivity(selectSailIntent);

                    Handler.sendEmptyMessage(0);

                } catch (Exception e) {
                     alertDialog.setMessage(e.getMessage());
                     Handler.sendEmptyMessage(1);

                }
            }
        }.start();
    }
};

2 个答案:

答案 0 :(得分:9)

  

“无法从类型处理程序”

中对非静态方法sendEmptyMessage(int)进行静态引用

这是因为Handler引用了一个类,但sendEmptyMessage不是静态方法(应该在对象上调用,而不是在类上调用)。

  

如何解决?

为了能够调用sendEmptyMessage方法,您将

  1. 需要实例化一个Handler,即执行类似

    的操作
    Handler h = new Handler();
    h.sendEmptyMessage(0);
    

  2. static修饰符添加到sendEmptyMessage方法:

    public static void sendEmptyMessage(int i) { ...
           ^^^^^^
    

答案 1 :(得分:3)

Handler handler = new Handler();
Handler.myStaticMethod();
handler.myNonStaticMethod();

为了调用非静态方法(也就是实例方法),您必须引用特定对象(实例)。你不能参考这门课。

静态方法可以通过仅引用类来调用(它们也可以从对该类的对象的引用中调用,但这被认为是不好的做法)。

关于用法:当您创建实例(对象)时,该对象具有一些内部数据(状态)。非静态方法利用引用的对象的状态,静态方法不需要该数据)。