Как удалить все элементы RecyclerView из базы данных SQLite? - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в кодировании на Java. Я создаю приложение для заметок с множеством других функций. И одна из функций - хранение данных банковской карты пользователя в RecyclerView. Я сделал это, создав SQLite CRUD. Все функции создания, чтения, обновления и удаления работают. И я защитил эту страницу блокировкой шаблона.

И когда мы находимся на странице шаблона ввода, мы видим интерактивный текст под названием Нажмите ЗДЕСЬ, если вы забыли свой шаблон , это работает. И когда вы нажимаете на этот интерактивный текст, приложение показывает диалоговое окно с предупреждением под названием вы уверены? и появляется сообщение . Если вы измените шаблон, все ваши данные будут удалены , затем есть две кнопки Да и Нет . Нет ничего не делает, просто отменяет забытый шаблон. Но проблема в кнопке Да.

Когда мы нажимаем на нее, она должна удалить все банковские карты или удалить все данные. Пожалуйста, предложите способ удалить все данные из базы данных SQLite. Я пробовал много способов сделать это.

ЗДЕСЬ МОЯ АКТИВНОСТЬ ВХОДНОГО ШАБЛОНА

package com.ixidev.simplenotepad;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ixidev.simplenotepad.model.Note;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class ProgramActivity extends AppCompatActivity {

    FloatingActionButton fab, fabChangePattern, fabexit;
    RecyclerView mRecyclerViewBC;
    CardsDatabaseHelper cardsDatabaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_program);

        mRecyclerViewBC = findViewById(R.id.recyclerViewBC);
        cardsDatabaseHelper = new CardsDatabaseHelper(this);

        showRecord();

        fabexit = findViewById(R.id.exitProgram);
        fab = findViewById(R.id.addFabButtonBC);
        fabChangePattern = findViewById(R.id.ChangePattern);

        fabexit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ProgramActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });

        fabChangePattern.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ProgramActivity.this, CreatePasswordActivity.class);
                startActivity(intent);
            }
        });

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ProgramActivity.this, AddBankCardActivity.class);
                intent.putExtra("BCeditMode", false);
                startActivity(intent);
            }
        });
    }

    private void showRecord() {

        CardAdapter cardAdapter = new CardAdapter(ProgramActivity.this, cardsDatabaseHelper.getAllBCdata(ConstantsCard.BC_C_ADD_TIMESTAMP + " DESC"));
        mRecyclerViewBC.setAdapter(cardAdapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        showRecord();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == event.KEYCODE_BACK) {
            moveTaskToBack(true);
        }
        return super.onKeyDown(keyCode, event);
    }
}

ЗДЕСЬ МОЯ КЛАСС ПОМОЩИ БАЗЫ ДАННЫХ

package com.ixidev.simplenotepad;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

import androidx.annotation.Nullable;

import java.util.ArrayList;

public class CardsDatabaseHelper extends SQLiteOpenHelper {


    public CardsDatabaseHelper(@Nullable Context context) {
        super(context, ConstantsCard.BC_DB_NAME, null, ConstantsCard.BC_DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(ConstantsCard.BC_CREATE_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS " + ConstantsCard.BC_TABLE_NAME);
        onCreate(db);
    }

    public long insertInfo(String number, String cvv, String expiry, String image, String addTimestamp, String updateTimestamp) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(ConstantsCard.BC_C_NUMBER, number);
        values.put(ConstantsCard.BC_C_CVV, cvv);
        values.put(ConstantsCard.BC_C_EXPIRY, expiry);
        values.put(ConstantsCard.BC_C_IMAGE, image);
        values.put(ConstantsCard.BC_C_ADD_TIMESTAMP, addTimestamp);
        values.put(ConstantsCard.BC_C_UPDATE_TIMESTAMP, updateTimestamp);

        long id = db.insert(ConstantsCard.BC_TABLE_NAME, null, values);
        db.close();
        return id;
    }

    public void updateInfo(String BCid, String number, String cvv, String expiry, String image, String addTimestamp, String updateTimestamp) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(ConstantsCard.BC_C_NUMBER, number);
        values.put(ConstantsCard.BC_C_CVV, cvv);
        values.put(ConstantsCard.BC_C_EXPIRY, expiry);
        values.put(ConstantsCard.BC_C_IMAGE, image);
        values.put(ConstantsCard.BC_C_ADD_TIMESTAMP, addTimestamp);
        values.put(ConstantsCard.BC_C_UPDATE_TIMESTAMP, updateTimestamp);

        db.update(ConstantsCard.BC_TABLE_NAME, values, ConstantsCard.BC_C_ID + " = ?", new String[]{BCid});
        db.close();
    }

    public void deleteInfo(String BCid) {

        SQLiteDatabase db = getWritableDatabase();
        db.delete(ConstantsCard.BC_TABLE_NAME, ConstantsCard.BC_C_ID + " = ? ", new String[]{BCid});
        db.close();
    }

    public void testDelete() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(ConstantsCard.BC_TABLE_NAME,null,null);
        db.execSQL("delete from "+ ConstantsCard.BC_TABLE_NAME);
        db.execSQL("TRUNCATE table " + ConstantsCard.BC_TABLE_NAME);
        db.close();
    }

    public void delete(String BCid)
    {
        String[] args={BCid};
        getWritableDatabase().delete("texts", "_ID=?", args);
    }

    public ArrayList<CardModel> getAllBCdata(String orderByBC) {

        ArrayList<CardModel> ArrayListCard = new ArrayList<>();

        String selectQuery = "SELECT * FROM " + ConstantsCard.BC_TABLE_NAME + " ORDER BY " + orderByBC;

        SQLiteDatabase BCdb = this.getWritableDatabase();
        Cursor CardCursor = BCdb.rawQuery(selectQuery, null);

        if (CardCursor.moveToNext()) {

            do {
                CardModel cardModel = new CardModel(
                        ""+CardCursor.getInt(CardCursor.getColumnIndex(ConstantsCard.BC_C_ID)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_IMAGE)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_NUMBER)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_CVV)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_EXPIRY)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_ADD_TIMESTAMP)),
                        ""+CardCursor.getString(CardCursor.getColumnIndex(ConstantsCard.BC_C_UPDATE_TIMESTAMP))
                );

                ArrayListCard.add(cardModel);
            } while (CardCursor.moveToNext());
        }

        BCdb.close();
        return ArrayListCard;
    }
}

ВОТ МОЙ КЛАСС АДАПТЕРА

package com.ixidev.simplenotepad;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.arch.core.executor.TaskExecutor;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.Holder> {

    private Context CardContext;
    private ArrayList<CardModel> CardArrayList;
    CardsDatabaseHelper cardsDatabaseHelper;

    public CardAdapter(Context cardContext, ArrayList<CardModel> cardArrayList) {
        CardContext = cardContext;
        CardArrayList = cardArrayList;
        cardsDatabaseHelper = new CardsDatabaseHelper(CardContext);
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View viewBC = LayoutInflater.from(CardContext).inflate(R.layout.bc_row, parent, false);

        return new Holder(viewBC);
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {

        CardModel cardModel = CardArrayList.get(position);

        final String BCid = cardModel.getBCid();
        final String BCimage = cardModel.getImageBC();
        final String BCnumber = cardModel.getNumber();
        final String BCcvv = cardModel.getCvv();
        final String BCexpiry = cardModel.getExpiryBC();
        final String addTimeStampBC = cardModel.getAddTimeStampBC();
        final String updateTimeStampBC = cardModel.getUpdateTimeStampBC();

        holder.profileIvBC.setImageURI(Uri.parse(BCimage));
        holder.number.setText(BCnumber);
        holder.cvv.setText(BCcvv);
        holder.expiryBC.setText(BCexpiry);

        holder.editButtonBC.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editDialog(
                  ""+position,
                  ""+BCid,
                  ""+BCnumber,
                  ""+BCcvv,
                  ""+BCexpiry,
                  ""+BCimage,
                  ""+addTimeStampBC,
                  ""+updateTimeStampBC
                );
            }
        });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                deleteDialog(
                        ""+BCid
                );
                return false;
            }
        });

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(CardContext, "Clicked", Toast.LENGTH_SHORT).show();
                cardsDatabaseHelper.testDelete();
                cardsDatabaseHelper.delete(BCid);
            }
        });

    }

    private void deleteDialog(final String BCid) {

       AlertDialog.Builder builderBC = new AlertDialog.Builder(CardContext);
       builderBC.setTitle("Delete?");
       builderBC.setMessage("Are you sure you want to delete this document?");
       builderBC.setCancelable(false);
       builderBC.setIcon(R.drawable.ic_action_delete);
       builderBC.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {

               cardsDatabaseHelper.deleteInfo(BCid);
               ((ProgramActivity)CardContext).onResume();
               Toast.makeText(CardContext, "Successfully deleted!", Toast.LENGTH_SHORT).show();
           }
       });

       builderBC.setNegativeButton("No", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
               dialog.cancel();
           }
       });

       builderBC.create().show();
    }

    private void editDialog(String position, String BCid, String BCnumber, String BCcvv, String BCexpiry, String BCimage, String addTimeStampBC, String updateTimeStampBC) {

        AlertDialog.Builder BCbuilder = new AlertDialog.Builder(CardContext);
        BCbuilder.setTitle("Edit?");
        BCbuilder.setMessage("Are you sure you want to edit this Bank Card?");
        BCbuilder.setCancelable(false);
        BCbuilder.setIcon(R.drawable.ic_action_edit);

        BCbuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                Intent intent = new Intent(CardContext, EditBankCardActivity.class);
                intent.putExtra("BCID", BCid);
                intent.putExtra("NUMBER", BCnumber);
                intent.putExtra("CVV", BCcvv);
                intent.putExtra("EXPIRYBC", BCexpiry);
                intent.putExtra("IMAGE", BCimage);
                intent.putExtra("BC_ADD_TIMESTAMP", addTimeStampBC);
                intent.putExtra("BC_UPDATE_TIMESTAMP", updateTimeStampBC);
                intent.putExtra("BCeditMode", true);
                CardContext.startActivity(intent);
            }
        });

        BCbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        BCbuilder.create().show();
    }

    @Override
    public int getItemCount() {
        return CardArrayList.size();
    }

    class Holder extends RecyclerView.ViewHolder {

        ImageView profileIvBC;
        TextView number, cvv, expiryBC;
        ImageButton editButtonBC;

        public Holder(@NonNull View itemView) {
            super(itemView);

            profileIvBC = itemView.findViewById(R.id.profileIvBC);
            number = itemView.findViewById(R.id.number);
            cvv = itemView.findViewById(R.id.cvv);
            expiryBC = itemView.findViewById(R.id.expiry);
            editButtonBC = itemView.findViewById(R.id.editBtnBC);
        }
    }

}

ЗДЕСЬ МОЙ КЛАСС МОДЕЛИ

package com.ixidev.simplenotepad;

public class CardModel {

    String BCid, imageBC, number, cvv, expiryBC, addTimeStampBC, updateTimeStampBC;

    public CardModel(String BCid, String imageBC, String number, String cvv, String expiryBC, String addTimeStampBC, String updateTimeStampBC) {
        this.BCid = BCid;
        this.imageBC = imageBC;
        this.number = number;
        this.cvv = cvv;
        this.expiryBC = expiryBC;
        this.addTimeStampBC = addTimeStampBC;
        this.updateTimeStampBC = updateTimeStampBC;
    }

    public String getBCid() {
        return BCid;
    }

    public void setBCid(String BCid) {
        this.BCid = BCid;
    }

    public String getImageBC() {
        return imageBC;
    }

    public void setImageBC(String imageBC) {
        this.imageBC = imageBC;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getCvv() {
        return cvv;
    }

    public void setCvv(String cvv) {
        this.cvv = cvv;
    }

    public String getExpiryBC() {
        return expiryBC;
    }

    public void setExpiryBC(String expiryBC) {
        this.expiryBC = expiryBC;
    }

    public String getAddTimeStampBC() {
        return addTimeStampBC;
    }

    public void setAddTimeStampBC(String addTimeStampBC) {
        this.addTimeStampBC = addTimeStampBC;
    }

    public String getUpdateTimeStampBC() {
        return updateTimeStampBC;
    }

    public void setUpdateTimeStampBC(String updateTimeStampBC) {
        this.updateTimeStampBC = updateTimeStampBC;
    }
}

А вот мой КОНСТАНТЫ класс

package com.ixidev.simplenotepad;

public class ConstantsCard {

public static final String BC_DB_NAME = "MY_BANK_CARDS";
public static final int BC_DB_VERSION = 1;
public static final String BC_TABLE_NAME = "MY_BANK_CARDS_TABLE";

public static final String BC_C_ID = "BC_ID";
public static final String BC_C_NUMBER = "BC_NUMBER";
public static final String BC_C_CVV = "BC_CVV";
public static final String BC_C_EXPIRY = "BC_EXPIRY";
public static final String BC_C_IMAGE = "BC_IMAGE";
public static final String BC_C_ADD_TIMESTAMP = "BC_ADD_TIMESTAMP";
public static final String BC_C_UPDATE_TIMESTAMP = "BC_UPDATE_TIMESTAMP";

public static final String BC_CREATE_TABLE = "CREATE TABLE " + BC_TABLE_NAME + "("
        + BC_C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + BC_C_NUMBER + " TEXT,"
        + BC_C_CVV + " TEXT,"
        + BC_C_EXPIRY + " TEXT,"
        + BC_C_IMAGE + " TEXT,"
        + BC_C_ADD_TIMESTAMP + " TEXT,"
        + BC_C_UPDATE_TIMESTAMP + " TEXT"
        + ");";
}
...