Во-первых, определите некоторый класс сущности для ваших данных:
@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
(вы можете переименовать этот класс, чтобы сделать его другим, поскольку он будет обрабатывать не только * 1009).* объекты сейчас):
@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
для вашего ProductEntity
, чтобы вы могли вставить/ получить данные с вашего 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);
Вы можете отправить свой объект ProductEntity
с ProductActivity
на MainActivity
следующим образом:
//product is set by you somewhere
Intent replyIntent = new Intent();
replyIntent.putExtra(EXTRA_REPLY, product);
setResult(RESULT_OK, replyIntent);
Затем обработайте его в MainActivity
через 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();
}
}