我想在不使用LiveData
的情况下从 AndroidRoom
数据库中获取List<Model>
。 如何使用asynctask
或thread
函数获取所有行。
首先在你的DAO中定义get方法,假设你正在获取所有用户:
用户型号:
@Entity
public class UserModel {
@PrimaryKey
public int id;
public String first_name;
public String last_name;
}
用户数据访问对象
@Dao
public interface UserDao {
@Query("SELECT first_name, last_name FROM user")
public List<UserModel> getAllUsers();
}
创建应用程序数据库包装类
@Database(entities = {UserModel.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
使用以下代码访问数据库
public class UserServices{
private AppDatabase db ;
public UserServices(){
db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
}
public List<UserModel> getAllUsers(){
return new GetUsersAsyncTask().exicute().get();
}
private class GetUsersAsyncTask extends AsyncTask<Void, Void,List<UserModel>>
{
@Override
protected Void doInBackground(Void... url) {
return db.getUserDao().getAllUsers();
}
}
}
现在通过调用访问用户
UserServices userServices=new UserServices();
List<UserModel> users=userServices.getAllUsers();