【发布时间】:2019-08-24 19:36:58
【问题描述】:
所以我使用 Android Room 库在 SQLite DB 上执行请求。
我无法在 UI 线程上发出请求,所以我正在使用 AsyncTask。
我的应用很简单,我只是希望能够将新用户插入到我的数据库中。
所以有我的 UserDao.java :
@Dao
public interface UserDao {
@Insert
long insert(User user);
@Update
void update(User user);
@Delete
void delete(User user);
}
还有我的 User.java :
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
private int age;
// Getter / Setter
}
然后,为了执行我的插入请求,我必须创建一个完整的 AsyncTask 类:
public static class insertAsyncTask extends AsyncTask<User, Void, User> {
private WeakReference<Activity> weakActivity;
private UserDao dao;
// Constructeur
insertAsyncTask(Activity activity, UserDao dao) {
this.weakActivity = new WeakReference<>(activity);
this.dao = dao;
}
@Override
protected User doInBackground(final User... params) {
return this.dao.getById(this.dao.insert(params[0]));
}
@Override
protected void onPostExecute(User u) {
// Some code
}
最后,我这样称呼插入:
new AppDatabase.insertAsyncTask(this, db.userDao()).execute(myUser);
那么是否可以让我的 AsyncTask 类更通用? 我希望能够将此类用于多个请求(如插入、更新、删除......)。
或者我应该改用通用 DAO 吗?
在此先感谢,对不起我的英语;)
【问题讨论】:
-
您也可以将 thread 和 runnable 用于后台任务。
-
“所以我使用的是 AsyncTask”——我建议使用更现代的东西:
LiveData、Kotlin 协程或 RxJava。 -
是的,我查看了 LiveData 和 RxJava,但我不明白它们如何帮助我创建可以处理不同请求的单个异步任务。
标签: java android sqlite android-asynctask android-room