Поэтому я использую библиотеку Android Room для выполнения запросов к БД SQLite.
Я не могу делать запросы в потоке пользовательского интерфейса, поэтому я использую AsyncTask.
MyПриложение простое, я просто хочу иметь возможность вставлять новых пользователей в мою базу данных.
Итак, есть мой 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?
Заранее спасибо иизвините за мой английский;)