gpt4 book ai didi

java - 如何为 Android Room 请求创建通用 AsyncTask

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:18 26 4
gpt4 key购买 nike

因此,我使用 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 来代替?

提前致谢,抱歉我的英语不好;)

最佳答案

是的,您可以在任何地方使用它,首先您必须为所有方法创建通用异步任务类 您可以创建一个接口(interface),将其传递给 AsyncTask(在构造函数中),然后在 onPostExecute() 中调用方法

    For example:

1.您的界面:

    public interface OnTaskRoomCompleted{
void onTaskCompleted(User);
}

2.您的 Activity :

    public class YourActivity implements OnTaskRoomCompleted{
// your Activity
}

3.还有你的AsyncTask:

public class YourTask extends AsyncTask<User,Object,User>{ //change Object to required type
private OnTaskRoomCompleted listener;

public YourRoomTask(OnTaskCompleted listener){
this.listener=listener;
}

// required methods
protected void onPostExecute(Object user){
// your stuff
listener.onTaskRoomCompleted(user);
}

}

关于java - 如何为 Android Room 请求创建通用 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55492355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com