当我调用AsyncTask时,获取a不能对非静态方法进行静态引用

问题描述 投票:3回答:2

我正在使用AsyncTask在后台加载位图。我创建了一个继承自AsyncTask的类Mybackground。如果我做以下工作,它的工作原理,

new MyBackground().execute();

但是当我这样称呼时,

MyBackground mBackground=new MyBackground();
mBackground.p1=1;
mBackground.p2="tets";
MyBackground.execute();

我得到的错误不能使静态引用非静态。为什么我收到此错误。有没有办法做到这一点?如果不是传递2个不同参数的好方法,因为execute只接受1个参数?

android android-asynctask
2个回答
4
投票

你可以调用mBackground.execute(),它调用你的execute类的特定实例的MyBackground方法。

调用new MyBackground().execute()会创建一个新的MyBackground实例,然后调用execute,这就是为什么你没有得到错误。

如果您不确定static和instance方法之间的区别是什么,请查看Java: static and instance methods

静态方法不需要存在该类型的实例,并且在类的所有实例之间共享静态属性。


2
投票

如果你想将一些数据传递到你的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();

约瑟夫伯爵很好地解释了为什么你得到静态参考错误。

© www.soinside.com 2019 - 2024. All rights reserved.