Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 单击按钮删除项目_Android Studio_Sql Delete - Fatal编程技术网

Android studio 单击按钮删除项目

Android studio 单击按钮删除项目,android-studio,sql-delete,Android Studio,Sql Delete,在我的main活动中我希望我的按钮删除我的视图列表中的所有项目。不幸的是,我在这里找到的所有解决方案都帮不了我。如果我单击“全部清除”按钮,它将删除列表中的所有项目,但这些项目仍保存在我的数据库中 我对Android Studio完全是新手,所以我不知道如何编写代码,让它按照我想要的方式工作 这是我的主要活动: package com.vorlesung.iubh.todo; import android.content.Context; import android.content.Inte

在我的
main活动中
我希望我的按钮删除我的视图列表中的所有项目。不幸的是,我在这里找到的所有解决方案都帮不了我。如果我单击“全部清除”按钮,它将删除列表中的所有项目,但这些项目仍保存在我的数据库中

我对Android Studio完全是新手,所以我不知道如何编写代码,让它按照我想要的方式工作

这是我的主要活动:

package com.vorlesung.iubh.todo;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    DatabaseHepler myDB;
    ArrayList<String> list;
    ListView myToDoList;
    ArrayAdapter<String> arrayAdapter;
    SparseBooleanArray selectedItem;

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

        Button addToDo = (Button) findViewById(R.id.addToDo);
        Button clearAll = (Button) findViewById(R.id.clearALL);
        Button editSelected = (Button) findViewById(R.id.editSelected);
        Button clearDone = (Button) findViewById(R.id.clearDone);

        myToDoList = (ListView) findViewById(R.id.myToDoList);
        myDB = new DatabaseHepler(this);

        list = new ArrayList<>();
        Cursor data = myDB.getListContents();

        if (data.getCount() == 0)
            Toast.makeText(this, "The Database was empty",         Toast.LENGTH_LONG).show();
        else {
            while (data.moveToNext()) {
                list.add(data.getString(1));
                arrayAdapter = new ArrayAdapter<>(this,     android.R.layout.simple_list_item_multiple_choice, list);
                myToDoList.setAdapter(arrayAdapter);
            }
        }
    }

    public void onClickaddToDo(View button) {
        Intent newToDo = new Intent(this, AddToDo.class);
        startActivity(newToDo);
    }

    // With this onClick I want to delete all Items from my List.
    public void onClickaclearALL(View button) {
        list.clear();
        arrayAdapter.notifyDataSetChanged();
    }
}
编辑 我的日志文件中显示了以下错误:

2018-12-23 10:16:05.627 21957-21973/com.vorlesung.iubh.todo E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2018-12-23 10:16:05.627 21957-21973/com.vorlesung.iubh.todo E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
2018-12-23 10:16:05.628 21957-21973/com.vorlesung.iubh.todo E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
2018-12-23 10:17:26.766 21957-21957/com.vorlesung.iubh.todo E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.vorlesung.iubh.todo, PID: 21957
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:5610)
    at android.view.View$PerformClick.run(View.java:22265)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:5610) 
    at android.view.View$PerformClick.run(View.java:22265) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
 Caused by: java.lang.IllegalArgumentException: Empty bindArgs
    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1656)
    at com.vorlesung.iubh.todo.DatabaseHepler.deleteAllRow(DatabaseHepler.java:51)
    at com.vorlesung.iubh.todo.MainActivity.onClickaclearALL(MainActivity.java:59)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:5610) 
    at android.view.View$PerformClick.run(View.java:22265) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
  • 您应该先从数据库中删除,然后更新列表
  • 不要在主线程中执行数据库操作,而使用AsyncTask
  • 在代码中,您应该有两个异步任务:一个用于检索此列表,另一个用于清除列表

    例如,您可以在MainActivity中使用此功能

    private class DeleteItemsAsyncTask extends AsyncTask<Void, Void, Void> {
            private Context mContext;
    
            DeleteItemsAsyncTask(Context context) {
                mContext = context;
            }
    
            @Override
            protected Void doInBackground(Void... voids) {
                myDB.deleteRow();
                return null;
            }
    
            @Override
            protected void onPostExecute(Void void) {
                list.clear();
                arrayAdapter.notifyDataSetChanged();
            }
        }
    

    类似地,列出数据时也应该这样做。

    您需要在DatabaseHepler中创建一个函数,以删除表中的所有元素

    在DatabasePler类中,需要编写此函数

    public void deleteAllRow() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("delete from "+ TABLE_NAME);
        db.close();
    }
    
    在您的主要活动中,需要编写以下代码:

    // With this onClick I want to delete all Items from my List.
    public void onClickaclearALL(View button) {
        list.clear();
        myDB.deleteAllRow(); // this will delete all data from the table.
        arrayAdapter.notifyDataSetChanged();
    }
    

    这将对您有所帮助。

    您只清除了列表,但从未调用deleteRow…@Jacob是的,我知道,但我不知道我必须在哪里调用它,或者如何调用:(我必须在我的MainActivity或数据库中调用它吗?现在,如果我单击“全部清除”,应用程序将停止运行)Button2018-12-23 10:12:56.234 21718-21718/com.vorlesung.iubh.todo E/AndroidRuntime:FATAL EXCEPTION:main Process:com.vorlesung.iubh.todo,PID:21718 java.lang.IllegalStateException:无法为android执行方法:单击不确定这是否正确,但当我单击按钮时会显示此信息请更新函数delete谢谢谢谢谢谢谢谢现在它对我来说很好。非常感谢,圣诞快乐:D
    public void deleteAllRow() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("delete from "+ TABLE_NAME);
        db.close();
    }
    
    // With this onClick I want to delete all Items from my List.
    public void onClickaclearALL(View button) {
        list.clear();
        myDB.deleteAllRow(); // this will delete all data from the table.
        arrayAdapter.notifyDataSetChanged();
    }