首先,为数据定义一些实体类:
@Entity(tableName = "products")
public class ProductEntity {
@PrimaryKey
private int id;
private String name;
private String description;
private int price;
@Override
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public ProductEntity() {
}
public ProductEntity(int id, String name, String description, int price) {
this.id = id;
this.name = name;
this.description = description;
this.price = price;
}
}
其次,为它创建一个DAO类。可能如下:
@Dao
public interface ProductDao {
@Query("SELECT * FROM products")
LiveData<List<ProductEntity>> loadAllProducts();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<ProductEntity> products);
@Query("select * from products where id = :productId")
LiveData<ProductEntity> loadProduct(int productId);
@Query("select * from products where id = :productId")
ProductEntity loadProductSync(int productId);
}
然后,添加有关您的
ProductDao
到
WordRoomDatabase
(您可以重命名这个类,使其成为其他类,因为它不仅可以处理
Word
立即对象):
@Database(entities = {Word.class, ProductEntity.class}, version = 1)
public abstract class WordRoomDatabase extends RoomDatabase {
...
public abstract ProductDao productDao();//add this os that Room generates ProductDao_Impl
...
}
新建
ProductRepository
专门为您
ProductEntity
public class ProductRepository {
private LiveData<List<ProductEntity>> mAllProducts;
private ProductDao mProductDao;
WordRoomDatabase db = WordRoomDatabase.getDatabase(application);
mProductDao = db.productDao();
mAllProducts = mProductDao.loadAllProducts();
}
public LiveData<List<ProductEntity>> getAllProducts() {
return mAllProducts;
}
public void insert (ProductEntity product) {
new insertAsyncTask(mProductDao).execute(product);
}
private static class insertAsyncTask extends AsyncTask<ProductEntity, Void, Void> {
private ProductDao mProductDao;
insertAsyncTask(ProductDao dao) {
mProductDao = dao;
}
@Override
protected Void doInBackground(final ProductEntity... params) {
mAsyncTaskDao.insert(Arrays.asList(params[0]));
return null;
}
}
}
ProductViewModel
产品实体
MainActivity
以下内容:
public class ProductViewModel extends AndroidViewModel {
private ProductRepository mRepository;
private LiveData<List<ProductEntity>> mAllProducts;
public ProductViewModel (Application application) {
super(application);
mRepository = new ProductRepository(application);
mAllProducts = mRepository.getAllProducts();
}
LiveData<List<ProductEntity>> getAllProducts() { return mAllProducts; }
public void insert(ProductEntity product) { mRepository.insert(product); }
}
ProductActivity
Intent intent = new Intent(MainActivity.this, ProductActivity.class);
startActivityForResult(intent, PRODUCT_RESULT_CODE);
你可以把你的
主要活动
//product is set by you somewhere
Intent replyIntent = new Intent();
replyIntent.putExtra(EXTRA_REPLY, product);
setResult(RESULT_OK, replyIntent);
主要活动
onActivityResult
productViewModel
以下内容:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
Word word = new Word(data.getStringExtra(NewWordActivity.EXTRA_REPLY));
mWordViewModel.insert(word);
} else if (requestCode == PRODUCT_RESULT_CODE && resultCode == RESULT_OK) {
ProductEntity product = (ProductEntity) data.getSerializableExtra(NewWordActivity.EXTRA_MYCLASS_REPLY);
productViewModel.insert(product);
} else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}