要使用Android中的Room Repository和AsyncTask进行查询并从表中获取数据,首先需要设置一个Room数据库和数据访问对象(DAO)。以下是一个示例:
@Entity(tableName = "user")
public class User {
@PrimaryKey
public int id;
public String name;
public String email;
}
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List getAllUsers();
}
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
public class UserRepository {
private UserDao userDao;
private List users;
public UserRepository(Application application) {
AppDatabase db = Room.databaseBuilder(application, AppDatabase.class, "database-name").build();
userDao = db.userDao();
}
public List getAllUsers() {
new AsyncTask>() {
@Override
protected List doInBackground(Void... voids) {
return userDao.getAllUsers();
}
@Override
protected void onPostExecute(List result) {
users = result;
}
}.execute();
return users;
}
}
在上面的代码中,UserRepository
类是一个使用AsyncTask进行查询的Room Repository。getAllUsers
方法在后台线程中执行查询,然后在查询完成后将结果保存在users
变量中。
使用示例:
UserRepository userRepository = new UserRepository(this.getApplication());
List userList = userRepository.getAllUsers();
需要注意的是,由于异步执行的查询,userList
将在查询完成之前返回。因此,在使用查询结果之前,请确保等待查询完成。