【发布时间】:2018-07-28 16:22:44
【问题描述】:
我正在使用 Android Room,我想获取新插入行的 ID。我已经在我的模型类中声明了列:
@PrimaryKey (autoGenerate = true)
@ColumnInfo (name = "productID")
int id;
然后我知道我可以通过 dao 返回 long 来检索它:
@Insert
long insert(Product p);
起初我直接在 View 中使用“线程”调用。如您所知,这不是推荐的方法。所以我正在尝试为 ModelView 和存储库更改它。但我不知道我怎样才能得到这个ID。
我的存储库类:
public class ProductRepository {
private ProductDao mProductDao;
ProductRepository(Application application) {
AppDatabase db = AppDatabase.getDatabase(application);
mProductDao = db.pDao();
}
public void insertProduct(Product p) {
new insertAsyncTask(mProductDao).execute(p);
}
private static class insertAsyncTask extends AsyncTask<Product, Void, Void> {
private ProductDao mAsyncTaskDao;
insertAsyncTask(ProductDao dao) {
mAsyncTaskDao = dao;
}
@Override
protected Void doInBackground(final Product... params) {
mAsyncTaskDao.insert(params[0]);
return null;
}
}
}
还有我的模型课:
public class ProductModelView extends AndroidViewModel {
private ProductRepository mRepository;
public ProductModelView(Application application) {
super(application);
mRepository = new ProductRepository(application);
}
public void insert(Product p) {
mRepository.insertProduct(p);
}
}
在我的活动中,我正在插入这样的新对象:
mProductModelView.insert(pc);
那么我如何从“插入”中检索这个长值并在我的活动中获取它?我想 LiveData 可能是一个不错的选择,但老实说,我不知道如何实现它:(
【问题讨论】:
标签: android