使用构造函数创建AsyncTask会给我带来错误

时间:2019-01-09 06:57:44

标签: android android-asynctask

我正在尝试创建一个AsyncTask来访问我的Room数据库。这是课程:

public class MyTask extends AsyncTask<Void, Void, Integer> {
    private Activity activity;
    private int userId;
    private String userName;
    private String userEmail;
    public MyTask(Activity activity ,int userId, String userName, String userEmail) {
        this.activity= activity;
        this.userId = userId;
        this.userName = userName;
        this.userEmail = userEmail;
    }

    @Override
    protected Integer doInBackground(Void... voids) {
        return null;
    }

}

一切顺利,我可以在访问DB的片段中初始化该类(在没有构造函数的情况下进行尝试)。但是,如果我尝试使用构造函数初始化它(如您在上面看到的那样),它就不想编译

MyTask myTask = new MyTask(getActivity(),1,"Bob","someEmail").execute();

它给了我这个错误: enter image description here

我认为这很简单。 las,谷歌在这一方面没有帮助我,我已经对AsyncTask有了脆弱的了解。我只是不明白如何添加构造函数来更改实例的类型(从MyTask到AsyncTask)。

2 个答案:

答案 0 :(得分:1)

问题在于,您在实例化MyTask之后正在调用execute()execute()返回AsyncTask,您可以阅读here)。

所以改变这个:

MyTask myTask = new MyTask(getActivity(),1,"Bob","someEmail").execute();

对此:

MyTask myTask = new MyTask(getActivity(),1,"Bob","someEmail");
myTask.execute();

答案 1 :(得分:-1)

// AsyncTask进行这些更改

private Context context;

public MyTask(Context context ,int userId, String userName, String userEmail) {
    this.context= context;
    this.userId = userId;
    this.userName = userName;
    this.userEmail = userEmail;
}

///这里类名可以是您的活动名

MyTask myTask = new MyTask(ClassName.this,1,"Bob","someEmail").execute();

始终作为asynctask的参数传递,不在构造函数中