简体   繁体   English

数据不会从数据库中删除

[英]Data are not deleted from database

First of all I have to tell I am still learning Android studio and maybe I missed some important and obvious staff. 首先,我要告诉我还在学习Android工作室,也许我错过了一些重要而明显的工作人员。

Now I am facing with problem with my database, or maybe RecycleViwe i am not sure. 现在我面临着我的数据库问题,或者RecycleViwe我不确定。

I my app, I am trying insert data into db and only in case if data is empty. 我是我的应用程序,我正在尝试将数据插入到数据库中,以防数据为空。 I did it and I think that works. 我做到了,我认为这很有效。 Now I am trying to implement new method to read data and delete. 现在我正在尝试实现读取数据和删除的新方法。 For now I can show data in my recycleView. 现在我可以在我的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. 

I am not sure what cause this problem. 我不确定是什么导致了这个问题。 Hope some of you guys can help me? 希望你们中的一些人可以帮助我吗?

Below you will find parts of code. 您将在下面找到部分代码。 If you want to see more, feel free to ask me. 如果你想看到更多,请随时问我。

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();

                }
            }
        });

Here is my recycleView and there is also my deletemethod. 这是我的recycleView,还有我的deletemethod。 For sure core fore delete method could be written in a more simple way but I copied some of my last trials. 肯定核心前删除方法可以用更简单的方式编写,但我复制了我的一些最后的试验。

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());
        }
    }
}

And here are some parts of Data Base. 这是数据库的一些部分。 As I told you I am not sure what can be a problem, maybe some of these method are written in a wrong way. 正如我告诉你的那样,我不确定是什么问题,也许这些方法中的一些是以错误的方式编写的。

    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();


    }
}

Your delete method is wrong.. You are passing parameter id but not using the id in your method as 你的删除方法是错误的..你传递参数id但不使用方法中的id作为

public void deleteCas(int id){

    SQLiteDatabase db = this.getWritableDatabase();

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

    db.close();
}

It should be 它应该是

public void deleteCas(int id){

    SQLiteDatabase db = this.getWritableDatabase();

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

    db.close();
}

Syntax not tested 语法未经测试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 数据从回收站列表中删除但不是从Sqlite数据库中删除 - Data Deleted From Recycler List But Not From Sqlite Database 从数据库删除数据时显示立即更改 - Show immediate changes when data deleted from database 应用程序从 Android 中删除的数据库文件中提供数据 - Application gives data from deleted database file in Android 没有错误,但是没有使用Delete从Sqlite数据库中删除数据 - No error but data is not getting deleted from Sqlite database using delete 从我清除Application中的数据时删除了Sqlite数据库 - Sqlite Database deleted when I clear data from Application 即使从服务器删除后,数据仍显示在房间数据库中 - Data is showing in room database even after deleted from server Firebase 实时数据库数据自动被删除 - Firebase Realtime Database Data Automatically Gets Deleted 该行中的数据不会从表中删除 - data in the row is not deleted from table 列表项已从ListView中删除,但未从数据库中删除 - List item is deleted from ListView, but not from the database (Android存储库模式)更新来自Web的已删除项目的电话数据库数据 - (Android Repository Pattern) Update phone database data with deleted items from web
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM