【问题标题】:Room database elements are not showing up房间数据库元素未显示
【发布时间】: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


    【解决方案1】:

    您忘记将适配器连接到RecyclerView

    所以,在您的 MainActivity 活动中,请在下面执行此操作

        viewModel.getProList().observe(this, new Observer<List<product>>() {
            @Override
            public void onChanged(@Nullable List<product> productLists) {
                productAdapter.setList(productLists);
                recyclerView.setAdapter(productAdapter); // <<<<<< change here
                Log.d("hello", "process" + productLists);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多