Удалить обе строки элементов списка в recyclerView и базе данных SQLite - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в программировании, я хочу сделать кнопку удаления в каждом списке предметов на recyclerView.Я получил некоторые ссылки от переполнения стека, и его работа для удаленного элемента только в действии (макете), но когда я снова запускаю действие, Выбранный элемент снова показывается.

Я нашел несколько связанных статей по stackoverflowи сделайте метод для удаления из SQLite.Но мое приложение подавляло «приложение, к сожалению, остановилось» каждый раз, когда я вызываю функцию удаления.

Я надеюсь, что кто-то может помочь мне разобраться в этом.

Вот мой класс Databasehelper

public class DatabaseHelperClass extends SQLiteOpenHelper {
Log cat Database
public static String log = "DatabaseHelper";

//Databse version
public static final int DATABASE_VERSION = 1;

//Database name
public static final String DATABSE_NAME = "dbPig";

//Tables Name
public static final String TABLE_PIGINFO = "tb_pigInfo";

//Common and PigInfo Column Names
public static final String KEY_ID = "id";
public static final String KEY_NAMA = "nama";
public static final String KEY_TANGGAL_PENDAFTARAN = "tanggal_pendaftaran";


//table create statement
//table pig Info
public static final String CREATE_TABLE_PIGINFO = "CREATE TABLE "
        + TABLE_PIGINFO + "(" + KEY_ID + " INTEGER," + KEY_NAMA
        + " TEXT," + KEY_TANGGAL_PENDAFTARAN
        + " TEXT" +  ")";


public DatabaseHelperClass(Context context) {
    super(context, DATABSE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

    //creating requaired table
    db.execSQL(CREATE_TABLE_PIGINFO);
      }


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // on upgrade drop older tables
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PIGINFO);

    // create new tables
    onCreate(db);
}

public void insertdata(String nama, String tanggal_pendaftaran) {
    System.out.print("Tersimpan" + TABLE_PIGINFO);
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(KEY_NAMA, nama);
    contentValues.put(KEY_TANGGAL_PENDAFTARAN, tanggal_pendaftaran);
    db.insert(TABLE_PIGINFO, null, contentValues);

}


public List<PigInfoTable> getdata() {
    List<PigInfoTable> data = new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery("select * from " + TABLE_PIGINFO + " ;", null);
    StringBuffer stringBuffer = new StringBuffer();
    PigInfoTable pigInfoTable = null;
    while (cursor.moveToNext()) {

        pigInfoTable = new PigInfoTable();
        String nama = cursor.getString(cursor.getColumnIndexOrThrow("nama"));
        String tanggal_pendaftaran = cursor.getString(cursor.getColumnIndexOrThrow("tanggal_pendaftaran"));
        pigInfoTable.setNama(nama);
        pigInfoTable.setTanggal_pendaftaran(tanggal_pendaftaran);
        stringBuffer.append(pigInfoTable);
        data.add(0, pigInfoTable);
    }

    for (PigInfoTable mo : data) {

        Log.i("Hellomo", "" + mo.getNama());
    }

    return data;
}

public void delete(int position) {

       SQLiteDatabase db = this.getWritableDatabase();
    String table = TABLE_PIGINFO;
    String whereClause = KEY_ID;
    String [] whereArgs = new String[] {String.valueOf(position)};
    db.delete (table, whereClause, whereArgs);

     }

и вот мой адаптер

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.Myholder> {

DatabaseHelperClass databaseHelper;

List <PigInfoTable> pigInfoTablesArrayList;


public RecycleAdapter(List <PigInfoTable> pigInfoTablesArrayList) {
    this.pigInfoTablesArrayList = pigInfoTablesArrayList;

}

class Myholder extends RecyclerView.ViewHolder{
    private TextView nama, tanggal_pendaftaran;
    private Button delete;

    public Myholder(View itemView) {
        super(itemView);

        nama = (TextView) itemView.findViewById(R.id.nama1);
        tanggal_pendaftaran = (TextView) itemView.findViewById(R.id.tanggal1);
        delete = (Button) itemView.findViewById(R.id.delete);


    }
}

@Override
public Myholder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_itempigview,null);
    return new Myholder(view);

}

@Override
public void onBindViewHolder(Myholder holder, final int position) {

        PigInfoTable pigInfoTable= pigInfoTablesArrayList.get(position);
        holder.nama.setText(pigInfoTable.getNama());
        holder.tanggal_pendaftaran.setText(pigInfoTable.getTanggal_pendaftaran());
        holder.itemView.setClickable(true);





        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                databaseHelper.delete(position);
                pigInfoTablesArrayList.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position, pigInfoTablesArrayList.size());
                notifyDataSetChanged();


            }
        });



}



@Override
public int getItemCount() {

    return pigInfoTablesArrayList.size();
}

Я пытаюсь найти какое-то другое решение, но возникла та же ошибка, что нулевые ссылки на объекты в

Положение

ошибка

java.lang.NullPointerException: попытка вызвать виртуальный метод 'void com.example.newbreedy.DatabaseHelperClass.delete (int)' для ссылки на пустой объект в com.example.newbreedy.RecycleAdapter $ 1.onClick (RecycleAdapter.java:66)

спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Сначала вам нужно инициализировать DatabaseHelperClass в вашем адаптере следующим образом:

databaseHelper =new DatabaseHelperClass (context);

Чем вам нужно вызвать функцию удаления и сообщить адаптеру об удаленном элементе, как этот,

databaseHelper.delete(position);
pigInfoTablesArrayList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, pigInfoTablesArrayList.size());
0 голосов
/ 26 февраля 2019

com.example.newbreedy.DatabaseHelperClass.delete (int) 'для пустой ссылки на объект, поскольку вы не инициализировали ссылку на DatabaseHelperClass databaseHelper;

Поэтому добавьте.в вашем адаптере утилизатора

В вашем коде вы отправляете позицию адаптера, поэтому вместо позиции отправьте KEY_ID.

            databaseHelper.delete(position);
            pigInfoTablesArrayList.remove(position);
            notifyDataSetChanged();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...