我有一个错误“无法从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();
}
};
答案 0 :(得分:9)
“无法从类型处理程序”
中对非静态方法sendEmptyMessage(int)进行静态引用
这是因为Handler
引用了一个类,但sendEmptyMessage
不是静态方法(应该在对象上调用,而不是在类上调用)。
如何解决?
为了能够调用sendEmptyMessage
方法,您将
需要实例化一个Handler
,即执行类似
Handler h = new Handler();
h.sendEmptyMessage(0);
或
将static
修饰符添加到sendEmptyMessage
方法:
public static void sendEmptyMessage(int i) { ...
^^^^^^
答案 1 :(得分:3)
Handler handler = new Handler();
Handler.myStaticMethod();
handler.myNonStaticMethod();
为了调用非静态方法(也就是实例方法),您必须引用特定对象(实例)。你不能参考这门课。
静态方法可以通过仅引用类来调用(它们也可以从对该类的对象的引用中调用,但这被认为是不好的做法)。
关于用法:当您创建实例(对象)时,该对象具有一些内部数据(状态)。非静态方法利用引用的对象的状态,静态方法不需要该数据)。