【问题标题】:Getting data from sqlite to recycler view从 sqlite 获取数据到回收站视图
【发布时间】:2018-07-13 01:10:30
【问题描述】:

我已将此代码与 json 对象一起使用。现在我用的是 sqlite,它有 NPE 错误。

    Cursor newRes = myDb.getAllData();
    while (newRes.moveToNext()) {
        Product product = new Product(Integer.parseInt(newRes.getString(0).toString()), Integer.parseInt(newRes.getString(1).toString()), newRes.getString(2).toString(),
                newRes.getString(3).toString(), newRes.getString(4).toString(), newRes.getString(5).toString(), Double.parseDouble(newRes.getString(6).toString()), newRes.getString(7).toString());
        productTransList.add(product);
    }

    adapter = new ProductAdapter(mCtx, productTransList);
    transRecyclerView.setAdapter(adapter);

编辑

07-13 09:05:29.763 13314-13351/com.example.arlene.capsmobile E/libdataflow_monitor: open error=Operation not permitted
07-13 09:05:31.542 13314-13314/com.example.arlene.capsmobile E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.arlene.capsmobile, PID: 13314
java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
    at com.example.arlene.capsmobile.translistTab.loadTransList(translistTab.java:135)
    at com.example.arlene.capsmobile.translistTab.onCreate(translistTab.java:72)

productTransList.add(product); 行出错

【问题讨论】:

  • 在 logcat 中找到堆栈跟踪,它将指向导致崩溃的行。您可以在此处发布堆栈跟踪。
  • @Geros 在productTransList.add(product); 行出错
  • 您必须确保该列表已初始化。
  • 是的。 ` 列表 productTransList; RecyclerView transRecyclerView; private ProductAdapter 适配器;`关于被初始化没有错误。
  • 根据您评论中的代码(上面),您只是在没有初始化的情况下声明了它,这是一个有效的 java 语句,但默认情况下它们的值是null,因此您必须专门为这样的列表分配值productTransList = new ArrayList<>();

标签: android sqlite android-recyclerview adapter getter


【解决方案1】:

先初始化productTransList,然后将对象添加到列表中。

productTransList = new ArrayList<>();

这将解决问题。

【讨论】:

    【解决方案2】:

    在您的 SQLiteHelper 类中,您需要初始化列表:

    public List<Product> getAllProducts() {
        try {
            List<Product > listProducts = new ArrayList<>();
            String selectQuery = "SELECT * FROM " + dbSchema.table_name;
            SQLiteDatabase mDb = this.getWritableDatabase();
            Cursor cursor = mDb.rawQuery(selectQuery, null);
    
            if (cursor.moveToFirst()) {
                do {
                    Product product = new 
                    Product(Integer.parseInt(cursor.getString(0).toString()), 
                    Integer.parseInt(cursor.getString(1).toString()), 
                    cursor.getString(2).toString(),
                    cursor.getString(3).toString(), 
                    cursor.getString(4).toString(), 
                    cursor.getString(5).toString(), 
                    Double.parseDouble(cursor.getString(6).toString()), 
                    cursor.getString(7).toString());
                    listProducts.add(mRecord);
                } while (cursor.moveToNext());
            }
            return listProducts;
        } catch (Exception ex) {
            return null;
        }
    }
    

    这里是 SQLite 的参考: SQLite Demo

    从您的活动中,异步使用辅助方法 getAllProducts 并将一个空列表作为输入参数传递给它。

    【讨论】:

      【解决方案3】:

      首先初始化一个ArrayList

       productTransList = new ArrayList<>();
       Cursor newRes = myDb.getAllData();
          while (newRes.moveToNext()) {
              Product product = new Product(Integer.parseInt(newRes.getString(0).toString()), Integer.parseInt(newRes.getString(1).toString()), newRes.getString(2).toString(),
                      newRes.getString(3).toString(), newRes.getString(4).toString(), newRes.getString(5).toString(), Double.parseDouble(newRes.getString(6).toString()), newRes.getString(7).toString());
              productTransList.add(product);
          }
      
          adapter = new ProductAdapter(mCtx, productTransList);
          transRecyclerView.setAdapter(adapter);
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 2019-12-31
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 2020-05-29
        相关资源
        最近更新 更多