要实现一个 Android Room Repository,用于获取用户数据,可以按照以下步骤进行操作:
@Entity(tableName = "users")
public class User {
@PrimaryKey
@NonNull
private String id;
@ColumnInfo(name = "name")
private String name;
// 其他属性和构造函数
// Getter 和 Setter 方法
}
@Dao
public interface UserDao {
@Query("SELECT * FROM users")
LiveData> getAllUsers();
@Query("SELECT * FROM users WHERE id = :userId")
LiveData getUserById(String userId);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertUser(User user);
@Delete
void deleteUser(User user);
}
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
public abstract UserDao userDao();
public static AppDatabase getInstance(Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, "app_database")
.build();
}
}
}
return INSTANCE;
}
}
public class UserRepository {
private UserDao userDao;
private LiveData> allUsers;
public UserRepository(Context context) {
AppDatabase db = AppDatabase.getInstance(context);
userDao = db.userDao();
allUsers = userDao.getAllUsers();
}
public LiveData> getAllUsers() {
return allUsers;
}
public LiveData getUserById(String userId) {
return userDao.getUserById(userId);
}
public void insertUser(User user) {
new InsertAsyncTask(userDao).execute(user);
}
public void deleteUser(User user) {
new DeleteAsyncTask(userDao).execute(user);
}
private static class InsertAsyncTask extends AsyncTask {
private UserDao userDao;
public InsertAsyncTask(UserDao userDao) {
this.userDao = userDao;
}
@Override
protected Void doInBackground(User... users) {
userDao.insertUser(users[0]);
return null;
}
}
private static class DeleteAsyncTask extends AsyncTask {
private UserDao userDao;
public DeleteAsyncTask(UserDao userDao) {
this.userDao = userDao;
}
@Override
protected Void doInBackground(User... users) {
userDao.deleteUser(users[0]);
return null;
}
}
}
在上述代码中,我们使用了 LiveData 来实现数据的观察和异步查询。通过 Repository 类,我们可以轻松地从 Room 数据库中获取用户数据。
可以根据需要对 UserRepository 类进行扩展,添加其他的数据操作方法,例如更新用户数据等。
希望以上解决方案对你有帮助!