【发布时间】:2020-11-26 14:20:04
【问题描述】:
数据库检查器显示数据库正在运行,但无法在 RecyclerView 中显示。
product.java
@Entity (tableName = "productTable")
public class product {
@PrimaryKey(autoGenerate = true)
private int pid;
@ColumnInfo(name = "product_name")
private String productName;
@ColumnInfo(name = "price")
private String price;
@ColumnInfo(name = "category")
private String category;
@ColumnInfo(name = "company")
private String companyName;
public product(String productName, String price, String category, String companyName) {
this.productName = productName;
this.price = price;
this.category = category;
this.companyName = companyName;
}
public int getPid() {
return pid;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public void setPid(int pid) {
this.pid = pid;
}
}
productDao.java
@Dao
public interface productDAO {
@Query("SELECT * FROM productTable")
LiveData<List<product>> getAllprod();
// @Query("SELECT * FROM product WHERE product_name order by product_name")
// product findByName(String product, String price);
@Query("SELECT * FROM productTable where :company order by product_name")
product section(String company);
@Query("DELETE FROM productTable WHERE pid = :id")
int deleteProduct(int id);
@Insert
void insert(product product);
@Update
void update(product product);
@Delete
void delete(product product);
@Query("DELETE FROM productTable")
void deleteAll();
}
productDatabase.java
@Database(entities = {product.class},version = 1)
public abstract class productDatabase extends RoomDatabase {
public static volatile productDatabase INSTANCE;
public abstract productDAO proDao();
public static productDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (productDatabase.class) {
if (INSTANCE == null) {
//create our db
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
productDatabase.class, "product_database")
.fallbackToDestructiveMigration()
.build();
}
}
}
return INSTANCE;
}
}
productRepository.java
public class productRepository {
private productDAO proDao;
private LiveData<List<product>> productList;
public productRepository(Application application)
{
productDatabase db = productDatabase.getDatabase(application);
proDao = db.proDao();
productList = proDao.getAllprod();
}
public LiveData<List<product>> getAllrepo(){
return productList;
}
public void insert(product prod){
new insertAsyncTask(proDao).execute(prod);
}
public void delete(product prod){
new deleteAsyncTask(proDao).execute(prod);
}
public void update(product prod){
new updateAsyncTask(proDao).execute(prod);
}
private class insertAsyncTask extends AsyncTask<product,Void,Void>{
private productDAO asyncTaskDao;
public insertAsyncTask(productDAO dao){
asyncTaskDao = dao;
}
@Override
protected Void doInBackground(product... products) {
asyncTaskDao.insert(products[0]);
return null;
}
}
private class deleteAsyncTask extends AsyncTask<product,Void,Void>{
private productDAO asyncTaskDao;
public deleteAsyncTask(productDAO proDao) {
asyncTaskDao = proDao;
}
@Override
protected Void doInBackground(product... products) {
asyncTaskDao.delete(products[0]);
return null;
}
}
private class updateAsyncTask extends AsyncTask<product,Void,Void>{
private productDAO asyncTaskDao;
public updateAsyncTask(productDAO proDao) {
asyncTaskDao = proDao;
}
@Override
protected Void doInBackground(product... products) {
asyncTaskDao.delete(products[0]);
return null;
}
}
}
productViewModel.java+
public class productViewModel extends AndroidViewModel {
private productRepository proRepo;
private LiveData<List<product>> proList;
public productViewModel(@NonNull Application application) {
super(application);
proRepo = new productRepository(application);
proList = proRepo.getAllrepo();
}
public LiveData<List<product>> getProList(){
return proList;}
public void insert(product prod){
proRepo.insert(prod);}
public void update(product prod){
proRepo.update(prod);
}
public void delete(product prod){
proRepo.delete(prod);
}
}
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private productAdapter productAdapter;
private productViewModel viewModel;
private TextView nothing;
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nothing = findViewById(R.id.nothing);
viewModel = ViewModelProviders.of(this)
.get(productViewModel.class);
recyclerView = findViewById(R.id.productView);
productAdapter = new productAdapter(this);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
FloatingActionButton fab = findViewById(R.id.add_component);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Add_Product.class));
}
});
viewModel.getProList().observe(this, new Observer<List<product>>() {
@Override
public void onChanged(@Nullable List<product> productLists) {
productAdapter.setList(productLists);
Log.d("hello", "process" + productLists);
}
});
if (productAdapter.getItemCount()!=0)
{
nothing.setVisibility(View.GONE);
Toast.makeText(this, "something not working",Toast.LENGTH_SHORT).show();
}
else
nothing.setVisibility(View.VISIBLE);
}
}
数据库检查器显示数据库已创建,保存过程也正在运行,但无法在 recyclerView 顶部显示它
【问题讨论】:
标签: android android-recyclerview android-room