我正在尝试创建一个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();
我认为这很简单。 las,谷歌在这一方面没有帮助我,我已经对AsyncTask有了脆弱的了解。我只是不明白如何添加构造函数来更改实例的类型(从MyTask到AsyncTask)。
答案 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的参数传递,不在构造函数中