recyclerview внутреннее соединение SQLite - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть две таблицы sqlite. Одна содержит Fid, name, mobile, а вторая таблица содержит Sid, fsid, subject, mark. теперь я хотел получить данные в recyclerView, которые содержат fid, name, mobile, sum (marks), но когда я ввожу новые данные из первой таблицы, они не отображаются.

вот мой запрос:

Cursor c = db.rawQuery("SELECT  id ,name ,mobile ,SUM(marks) FROM d_TB INNER JOIN d_TBL ON id = id_t ",null);
    return c;

вот мой класс адаптера:

  @Override
public void onBindViewHolder(final MyHolder holder, final int position) {
    final CrudData data_ = student.get(position);
    holder.itxt.setText(student.get(position).getId());
    holder.nametxt.setText(student.get(position).getName());
    holder.mobileTxt.setText(student.get(position).getmobile());
    holder.sum_.setText(student.get(position).getMarks());
    holder.setItemClickListener(new ItemLongClickListener() {
           @Override
             public void onItemClick(View v, int pos) {
               Intent i = new Intent(c,EditMarks.class);
               i.putExtra("Id", players.get(position).getId());
               i.putExtra("Name", players.get(position).getName());
               c.startActivity(i);
              }
        });

вот мой метод:

    private void retrieve()
{
    crudData.clear();

    DBAdapter db=new DBAdapter(this);
    db.openDB();
    Cursor c=db.insertSab();

    while (c.moveToNext())
    {
        String id=c.getString(0);
        String name=c.getString(1);
        String pos=c.getString(2);
        String sum=c.getString(3);

        CrudData p=new CrudData(id,name,pos,sum);

        crudData.add(p);
    }
    if(!(crudData.size()<1))
    {
        rv.setAdapter(adapter);
    }
    db.closeDB();;
}

1 Ответ

0 голосов
/ 08 сентября 2018

в вашем методе обновления данных вызовите notifyDataSetChanged();, если метод находится в вашем адаптере, иначе, если ваш метод обновления находится в вашей активности, вызовите youradapter. notifyDataSetChanged();

или вы можете делать следующие вещи, если ваши данные поступаютот какого-то вызова API и вставки в вашу базу данных

  1. отправьте трансляцию, откуда вы вставляете данные в базу данных
  2. , затем получите трансляцию в активности, где вы установили свой адаптер
  3. сделать публичный метод в вашем адаптере, чтобы получить ваши данные, т.е. ваш курсор

    в вашем адаптере, например,

    public void refreshData(){
    
          Cursor=yourdatabase.getyourMethod();
    
            notifyDataSetChanged();}
    
  4. и затем получить вашшироковещательный вызов refreshData с вашего адаптера, например

          adapter.refreshData()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...