我正在使用AsyncTask在后台加载位图。我创建了一个继承自AsyncTask的类Mybackground。如果我做以下工作,它的工作原理,
new MyBackground().execute();
但是当我这样称呼时,
MyBackground mBackground=new MyBackground();
mBackground.p1=1;
mBackground.p2="tets";
MyBackground.execute();
我得到的错误不能使静态引用非静态。为什么我收到此错误。有没有办法做到这一点?如果不是传递2个不同参数的好方法,因为execute只接受1个参数?
你可以调用mBackground.execute()
,它调用你的execute
类的特定实例的MyBackground
方法。
调用new MyBackground().execute()
会创建一个新的MyBackground
实例,然后调用execute,这就是为什么你没有得到错误。
如果您不确定static和instance方法之间的区别是什么,请查看Java: static and instance methods。
静态方法不需要存在该类型的实例,并且在类的所有实例之间共享静态属性。
如果你想将一些数据传递到你的AsyncTask
,你可以为它创建一个新的构造函数:
public class MyBackground extends AsyncTask<Void, Void, Void> {
...
private int p1;
private String p2;
public MyBackground(int p1, String p2) {
this.p1 = p1;
this.p2 = p2;
}
...
}
然后你可以使用:
MyBackground myBackground = new MyBackground(1,"tets");
myBackground.execute();
// or
MyBackground myBackground = new MyBackground(1,"tets").execute();
约瑟夫伯爵很好地解释了为什么你得到静态参考错误。