如何使用光标和循环显示来自 sqlite 的片段的 recyclerview

Posted

技术标签:

【中文标题】如何使用光标和循环显示来自 sqlite 的片段的 recyclerview【英文标题】:How to show a recyclerview on fragment from sqlite using cursor and looping 【发布时间】:2019-05-23 22:43:35 【问题描述】:

我在回收站视图中添加了一个数据,光标位于视图寻呼机的片段上,但回收站视图项目未显示。我使用循环从 sqlite 获取数据。

我尝试使用 for 和 while for 循环,但 recyclerview 仍然没有显示。我认为可能是sqlite中不存在数据,但检查后数据存在。

private void prepareNamaNilaiData(String kelas, String mapel) 
    Cursor c = MainActivity.myClass.lihatNamaNilai(kelas, mapel, "Pengetahuan");
    NamaNilai namaNilai[] = new NamaNilai[c.getCount()];
    int i = 0;
    c.moveToFirst();
    if (c.getCount() != 0) 
        while (!c.isAfterLast()) 
            //showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan "+ c.getString(0) + " pada kelas "+ c.getString(1));
            namaNilai[i] = new NamaNilai(c.getString(0), c.getString(1));
            namaNilaiList.add(namaNilai[i]);
            i++;
            c.moveToNext();
        
        namaNilaiAdapter.notifyDataSetChanged();
        return;
     else 
        showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan " + mapel + " pada kelas " + kelas);
    

这是我调用 prepareNamaNilaiData 方法时的代码

RecyclerView recyclerView = rootView.findViewById(R.id.rvNamaPengetahuan);
    namaNilaiAdapter = new NamaNilaiAdapter(namaNilaiList);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(namaNilaiAdapter);
    recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));

    try 
        String message1 = getArguments().getString(KEY_KELAS);
        String message2 = getArguments().getString(KEY_MAPEL);
        if ((message1 != null) && (message2 != null)) 
            prepareNamaNilaiData(message1,message2);
         else 
            prepareNamaNilaiData("-", "-");
        
     catch (Exception ex) 
        ex.printStackTrace();
    

这是我在 prepareNamaNilaiData 上调用的光标代码

 public Cursor lihatNamaNilai(String kelas, String mapel, String jenis_nilai) 
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery("SELECT DISTINCT NAMA_NILAI, TANGGAL FROM " + TABLE_Nilai 
                            + " WHERE KELAS = ? AND MAPEL = ? AND JENIS_NILAI = ? ORDER BY NAMA_NILAI"
                            ,new String[] kelas, mapel, jenis_nilai);
    return c;

我希望循环可以显示从 sqlite 到 recyclerview 所需的所有数据。但是数据没有出现在recyclerview中

logcat 上没有显示错误。

【问题讨论】:

【参考方案1】:

当循环结束时尝试Log.e(“count===“,namaNilaiList.size()),并检查你的适配器,也许没有声明 LayoutInflater ...只是也许。

【讨论】:

Log.e(“count===”,namaNilaiList.size()) 不工作,不要读取数据库。 在我的适配器中声明了LayoutInflater。你还有其他解决方案吗? 我看到你的代码' while (!c.isAfterLast()) //showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan "+ c.getString(0) + " pada kelas "+ c.getString(1)); namaNilai[i] = new NamaNilai(c.getString(0), c.getString(1)); namaNilaiList.add(namaNilai[i]);我++; c.moveToNext(); ' 为什么不直接将数据输入到列表中?像'namaNilaiList.add(new NamaNilai(c.getString(0), c.getString(1)););'

以上是关于如何使用光标和循环显示来自 sqlite 的片段的 recyclerview的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]

如何在片段类的列表视图中显示 SQLite 数据库?

如何在片段内的 recylerview 列表中显示 SQLite 数据库数据?

如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)

显示来自sqlite数据库的数据时“尝试在空对象引用上调用虚拟方法”[重复]

Android 使用 SQLite 光标显示下一项或上一项