Данные не удаляются из базы данных - PullRequest
0 голосов
/ 04 июня 2019

Прежде всего я должен сказать, что я все еще изучаю Android-студию и, возможно, я пропустил несколько важных и очевидных сотрудников.

Теперь я столкнулся с проблемой с моей базой данных, или, может быть, RecycleViwe, я не уверен.

В моем приложении я пытаюсь вставить данные в БД и только в том случае, если данные пусты. Я сделал это, и я думаю, что это работает. Сейчас я пытаюсь реализовать новый метод для чтения данных и удаления. Пока я могу показывать данные в моем recycleView.

My problem come with delete method. When I start app, and when delete some items it is show like everything is fine. But when I start app again, data appears again like nothing was happened. 

Я не уверен, что является причиной этой проблемы. Надеюсь, некоторые из вас, ребята, могут мне помочь?

Ниже вы найдете части кода. Если вы хотите увидеть больше, не стесняйтесь спрашивать меня.

In this part of code, I call my data and showing them in recycleView.

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

        pondeljak = (Button) findViewById(R.id.buttonPonedeljak);
        utorak = (Button) findViewById(R.id.buttonUtorak);
        sreda = (Button) findViewById(R.id.buttonSreda);
        cetvrtak = (Button) findViewById(R.id.buttonCetvrtak);
        petak = (Button) findViewById(R.id.buttonPetak);




        View view  = getLayoutInflater().inflate(R.layout.casovi,null);

        alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setView(view);

        db = new DataDays(this);

        alertDialog = alertDialogBuilder.create();

        recyclerView = (RecyclerView) view.findViewById(R.id.recycleCasoviID);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        casoviList = new ArrayList<>();
        casoviItems = new ArrayList<>();

       casoviList = db.getCasoviPonedeljak();

        for (Casovi c: casoviList){

            Casovi casovi = new Casovi();

            casovi.setRedniBrCasa(c.getRedniBrCasa());
            casovi.setNzaivCasa(c.getNzaivCasa());

            casoviItems.add(casovi);
        }

        recycleViewAdapter = new RecycleViewAdapter(this, casoviItems);
        recyclerView.setAdapter(recycleViewAdapter);
        recycleViewAdapter.notifyDataSetChanged();


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

                if (db.casoviCountPondeljak() == 0){
                    Intent intent = new Intent(MainActivity.this, Unos_casova.class);
                    intent.putExtra("Dan", "Pondeljak");
                    startActivity(intent);

                }else {
                    alertDialog.show();

                }
            }
        });

Вот мой recycleView, а также мой метод удаления. Конечно, основной метод удаления может быть написан более простым способом, но я скопировал некоторые из моих последних испытаний.

public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {

    private Context context;
    private List<Casovi> casoviItems;

    public RecycleViewAdapter(Context context, List<Casovi> casoviItems) {
        this.context = context;
        this.casoviItems = casoviItems;
    }


    @Override
    public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.prikaz_casova, parent,false);
        return new ViewHolder(view, context);
    }

    @Override
    public void onBindViewHolder( RecycleViewAdapter.ViewHolder holder, int position) {

        Casovi casovi = casoviItems.get(position);


        holder.redniBrCasPrikaz.setText(casovi.getRedniBrCasa());
        holder.nazivCasPrikaz.setText(casovi.getNzaivCasa());

    }

    @Override
    public int getItemCount() {

        return casoviItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView redniBrCasPrikaz;
        public TextView nazivCasPrikaz;
        public Button delteBtn;
        public Button editBtn;
        public CardView cardView;
        public int id;


        public ViewHolder(View view, Context ctx) {
            super(view);

            context = ctx;


            redniBrCasPrikaz = (TextView) view.findViewById(R.id.rednibrojCasaID);
            nazivCasPrikaz = (TextView) view.findViewById(R.id.nazivcasaID);
            delteBtn = (Button) view.findViewById(R.id.obrisiCasBtnID);
            editBtn = (Button) view.findViewById(R.id.izmeniCasBtnID);
            cardView = (CardView) view.findViewById(R.id.carViewID);

            delteBtn.setOnClickListener(this);
            editBtn.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {

            switch (view.getId()){
                case R.id.obrisiCasBtnID:

                    int position = getAdapterPosition();
                    Casovi casovi = casoviItems.get(position);
                    deleteItem(casovi.getId());
                    notifyItemRemoved(getAdapterPosition());
                    break;
            }

        }

        public void deleteItem (final int id){

            DataDays db = new DataDays(context);
            db.deleteCas(id);
            casoviItems.remove(getAdapterPosition());
        }
    }
}

А вот некоторые части базы данных. Как я уже говорил, я не уверен, в чем может быть проблема, возможно, некоторые из этих методов написаны неправильно.

    public void addCasovePonedeljak (Casovi casovi){

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(Constants.DAN, "Ponedeljak");
        values.put(Constants.REDNI_CAS, casovi.getRedniBrCasa());
        values.put(Constants.CAS, casovi.getNzaivCasa());

        db.insert(Constants.TABLE_NAME, null, values);


    }


    public List<Casovi> getCasoviPonedeljak(){

        SQLiteDatabase db = this.getReadableDatabase();
        List<Casovi> casoviList = new ArrayList<>();

       String pondeljakQuery = "SELECT * FROM " + Constants.TABLE_NAME + " WHERE " + Constants.DAN + " = " + " 'Ponedeljak' ";

       Cursor cursor = db.rawQuery(pondeljakQuery, null);

        if (cursor.moveToFirst()){
            do {

                Casovi casovi = new Casovi();

                //casovi.setId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(Constants.ID))));
                //casovi.setDan(cursor.getString(cursor.getColumnIndex(Constants.DAN)));
                casovi.setNzaivCasa(cursor.getString(cursor.getColumnIndex(Constants.CAS)));
                casovi.setRedniBrCasa(cursor.getString(cursor.getColumnIndex(Constants.REDNI_CAS)));

                casoviList.add(casovi);

            }while (cursor.moveToNext());

        }

        return casoviList;

        }




    public void deleteCas(int id){

        SQLiteDatabase db = this.getWritableDatabase();

        db.delete(Constants.TABLE_NAME, Constants.CAS + " = ?",
                new String[] {});

        db.close();
    }



    public int casoviCountPondeljak() {

        String countQuery = "SELECT * FROM " + Constants.TABLE_NAME;
        //String countQuery = "SELECT COUNT(*) FROM " + Constants.TABLE_NAME + " WHERE " + Constants.DAN + " = '" + "Ponedeljak' ";

        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.rawQuery(countQuery,null);
        //cursor.moveToFirst();
        return cursor.getCount();


    }
}

1 Ответ

0 голосов
/ 05 июня 2019

Ваш метод удаления неправильный. Вы передаете параметр id , но не используете идентификатор в своем методе как

public void deleteCas(int id){

    SQLiteDatabase db = this.getWritableDatabase();

    db.delete(Constants.TABLE_NAME, Constants.CAS + " = ?",
            new String[] {});

    db.close();
}

Это должно быть

public void deleteCas(int id){

    SQLiteDatabase db = this.getWritableDatabase();

    db.delete(Constants.TABLE_NAME, Constants.CAS + " = ?",
            new String[] {id.toString()});

    db.close();
}

Синтаксис не проверен

...