Java Android:Listview项目未删除。未检索到Id

Java Android:Listview项目未删除。未检索到Id,java,android,database,listview,Java,Android,Database,Listview,我目前正在尝试向ListView添加删除功能。不幸的是,出于某种原因,我似乎无法做到这一点。每当我长时间单击时,对话框都会正确显示,当我按“是”删除时,什么也不会发生。该项仍然保留在Listview和数据库中,因为我在调用delete方法之后立即调用该方法以显示更新数据库中的所有项。我已经尝试解决这个问题两天了,但我一无所获。似乎它无法从数据库中检索每个项目的Id,但我不确定它为什么要这样做 下面是我的习惯对象类: public class Habit extends Object implem

我目前正在尝试向ListView添加删除功能。不幸的是,出于某种原因,我似乎无法做到这一点。每当我长时间单击时,对话框都会正确显示,当我按“是”删除时,什么也不会发生。该项仍然保留在Listview和数据库中,因为我在调用delete方法之后立即调用该方法以显示更新数据库中的所有项。我已经尝试解决这个问题两天了,但我一无所获。似乎它无法从数据库中检索每个项目的Id,但我不确定它为什么要这样做

下面是我的习惯对象类:

public class Habit extends Object implements Serializable{

    private int day_count;
    private int _id;
    private String habit_name, date_started, end_date, day_count_string, id_string;

    public Habit(){
    }

    public Habit(int id, String name, String startDate, String endDate, int dayCount){
        this._id = id;
        this.habit_name = name;
        this.date_started = startDate;
        this.end_date = endDate;
        this.day_count = dayCount;
    }

    public Habit(String name, String startDate, String endDate, int dayCount){
        this.habit_name = name;
        this.date_started = startDate;
        this.end_date = endDate;
        this.day_count = dayCount;
    }

    public int getID()
    {
        return _id;
    }

    public int setID(int id)
    {
        return this._id;
    }

    public String getIDString()
    {
        id_string = "" + this._id;
        return id_string;
    }

    public int getDayCount()
    {
        return this.day_count;
    }

    public String getDayCountString()
    {
        day_count_string = "" + this.day_count;
        return day_count_string;
    }

    public int setDayCount(int dayCount)
    {
        return this.day_count;
    }

    public String getName()
    {
        return this.habit_name;
    }

    public void setName(String name)
    {
        this.habit_name = name;
    }

    public String getStartDate()
    {
        return this.date_started;
    }

    public void setStartDate(String startDate)
    {
        this.date_started = startDate;
    }

    public String getEndDate()
    {
        return this.end_date;
    }

    public void setEndDate(String endDate)
    {
        this.end_date = endDate;
    }
}
public class HabitDbHelper extends SQLiteOpenHelper{
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME="habits";

    public static final String TABLE_HABITS = "habit_names";
    public static final String KEY_NAME = "hname";
    public static final String KEY_ID = "id";
    public static final String KEY_STARTDATE = "start_date";
    public static final String KEY_ENDDATE = "end_date";
    public static final String KEY_DAYCOUNT = "day_count";

    public HabitDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "+TABLE_HABITS+" ("
                +KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
                +KEY_NAME+" TEXT, "
                +KEY_STARTDATE+" TEXT, "
                +KEY_ENDDATE+" TEXT, "
                +KEY_DAYCOUNT+" INTEGER);");
    }

    // Upgrading Database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_HABITS);
        onCreate(db);
    }

    //Adding new habit
    public void addHabit(Habit habit) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, habit.getName()); // Habit Name
        values.put(KEY_STARTDATE, habit.getStartDate()); // Start Date
        values.put(KEY_ENDDATE, habit.getEndDate()); // End Date
        values.put(KEY_DAYCOUNT, habit.getDayCount());

        // Inserting Row
        db.insert(TABLE_HABITS, null, values);
        db.close(); // Closing database connection
    }

    // Fetching 1 Habit
    public Habit getHabit(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_HABITS, new String[] { KEY_ID,
                        KEY_NAME, KEY_STARTDATE ,KEY_ENDDATE, KEY_DAYCOUNT }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Habit habit = new Habit(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), Integer.parseInt(cursor.getString(4)));
        // return contact
        return habit;
    }

    // Fetching all Habits
    public ArrayList<Habit> getAllHabits() {
        ArrayList<Habit> habitList = new ArrayList<Habit>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_HABITS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Habit habit = new Habit();
                habit.setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))));
                habit.setName(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
                habit.setStartDate(cursor.getString(cursor.getColumnIndex(KEY_STARTDATE)));
                habit.setEndDate(cursor.getString(cursor.getColumnIndex(KEY_ENDDATE)));
                habit.setDayCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_DAYCOUNT))));

                // Adding contact to list
                habitList.add(habit);
            } while (cursor.moveToNext());
        }
        return habitList;
    }

    // Deleting Single Habit
    public void deleteHabit(Habit habit) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_HABITS, KEY_ID + " = ?",
                new String[] { String.valueOf(habit.getID()) });
        db.close();
    }

}
下面是我的databaseHelper代码,其中我调用add Habity在数据库中创建一个习惯项,我调用DeleteHabity在习惯对象类中的id位置删除习惯:

public class Habit extends Object implements Serializable{

    private int day_count;
    private int _id;
    private String habit_name, date_started, end_date, day_count_string, id_string;

    public Habit(){
    }

    public Habit(int id, String name, String startDate, String endDate, int dayCount){
        this._id = id;
        this.habit_name = name;
        this.date_started = startDate;
        this.end_date = endDate;
        this.day_count = dayCount;
    }

    public Habit(String name, String startDate, String endDate, int dayCount){
        this.habit_name = name;
        this.date_started = startDate;
        this.end_date = endDate;
        this.day_count = dayCount;
    }

    public int getID()
    {
        return _id;
    }

    public int setID(int id)
    {
        return this._id;
    }

    public String getIDString()
    {
        id_string = "" + this._id;
        return id_string;
    }

    public int getDayCount()
    {
        return this.day_count;
    }

    public String getDayCountString()
    {
        day_count_string = "" + this.day_count;
        return day_count_string;
    }

    public int setDayCount(int dayCount)
    {
        return this.day_count;
    }

    public String getName()
    {
        return this.habit_name;
    }

    public void setName(String name)
    {
        this.habit_name = name;
    }

    public String getStartDate()
    {
        return this.date_started;
    }

    public void setStartDate(String startDate)
    {
        this.date_started = startDate;
    }

    public String getEndDate()
    {
        return this.end_date;
    }

    public void setEndDate(String endDate)
    {
        this.end_date = endDate;
    }
}
public class HabitDbHelper extends SQLiteOpenHelper{
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME="habits";

    public static final String TABLE_HABITS = "habit_names";
    public static final String KEY_NAME = "hname";
    public static final String KEY_ID = "id";
    public static final String KEY_STARTDATE = "start_date";
    public static final String KEY_ENDDATE = "end_date";
    public static final String KEY_DAYCOUNT = "day_count";

    public HabitDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "+TABLE_HABITS+" ("
                +KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
                +KEY_NAME+" TEXT, "
                +KEY_STARTDATE+" TEXT, "
                +KEY_ENDDATE+" TEXT, "
                +KEY_DAYCOUNT+" INTEGER);");
    }

    // Upgrading Database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_HABITS);
        onCreate(db);
    }

    //Adding new habit
    public void addHabit(Habit habit) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, habit.getName()); // Habit Name
        values.put(KEY_STARTDATE, habit.getStartDate()); // Start Date
        values.put(KEY_ENDDATE, habit.getEndDate()); // End Date
        values.put(KEY_DAYCOUNT, habit.getDayCount());

        // Inserting Row
        db.insert(TABLE_HABITS, null, values);
        db.close(); // Closing database connection
    }

    // Fetching 1 Habit
    public Habit getHabit(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_HABITS, new String[] { KEY_ID,
                        KEY_NAME, KEY_STARTDATE ,KEY_ENDDATE, KEY_DAYCOUNT }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Habit habit = new Habit(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), Integer.parseInt(cursor.getString(4)));
        // return contact
        return habit;
    }

    // Fetching all Habits
    public ArrayList<Habit> getAllHabits() {
        ArrayList<Habit> habitList = new ArrayList<Habit>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_HABITS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Habit habit = new Habit();
                habit.setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))));
                habit.setName(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
                habit.setStartDate(cursor.getString(cursor.getColumnIndex(KEY_STARTDATE)));
                habit.setEndDate(cursor.getString(cursor.getColumnIndex(KEY_ENDDATE)));
                habit.setDayCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_DAYCOUNT))));

                // Adding contact to list
                habitList.add(habit);
            } while (cursor.moveToNext());
        }
        return habitList;
    }

    // Deleting Single Habit
    public void deleteHabit(Habit habit) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_HABITS, KEY_ID + " = ?",
                new String[] { String.valueOf(habit.getID()) });
        db.close();
    }

}
公共类HabitDbHelper扩展了SQLiteOpenHelper{
私有静态最终int数据库_VERSION=1;
私有静态最终字符串数据库\u NAME=“habits”;
公共静态最终字符串表\u HABITS=“HABITS\u names”;
公共静态最终字符串键\u NAME=“hname”;
公共静态最终字符串键\u ID=“ID”;
公共静态最终字符串键\u STARTDATE=“开始\u日期”;
公共静态最终字符串键\u ENDDATE=“end\u date”;
公共静态最终字符串键\u DAYCOUNT=“day\u count”;
公共HabitDbHelper(上下文){
super(上下文、数据库名称、null、数据库版本);
}
//创建表
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(“创建表”+表+”(“
+KEY_ID+“整数主键自动递增,”
+按键名称+“文本,”
+按键\u开始日期+“文本,”
+键_ENDDATE+“文本,”
+键_DAYCOUNT+“整数”);”;
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表_);
onCreate(db);
}
//增加新习惯
公共生活习惯(习惯){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_NAME,habity.getName());//习惯名
value.put(KEY_STARTDATE,habity.getStartDate());//开始日期
value.put(KEY_ENDDATE,habity.getEndDate());//结束日期
value.put(KEY_DAYCOUNT,habity.getDayCount());
//插入行
db.insert(表格,空,值);
db.close();//关闭数据库连接
}
//抓取1习惯
公共习惯(int id){
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.query(表,新字符串[]{KEY\u ID,
KEY\u NAME,KEY\u STARTDATE,KEY\u ENDDATE,KEY\u DAYCOUNT},KEY\u ID+“=?”,
新字符串[]{String.valueOf(id)},null,null,null,null);
如果(光标!=null)
cursor.moveToFirst();
习惯习惯=新习惯(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3),Integer.parseInt(cursor.getString(4));
//回接
回归习惯;
}
//养成所有习惯
公共阵列列表getAllHabits(){
ArrayList habitList=新的ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表\u;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
习惯=新习惯();
setID(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID)));
setName(cursor.getString(cursor.getColumnIndex(KEY_NAME));
setStartDate(cursor.getString(cursor.getColumnIndex(KEY_STARTDATE));
setEndDate(cursor.getString(cursor.getColumnIndex(KEY_ENDDATE));
setDayCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_DAYCOUNT)));
//将联系人添加到列表中
习惯列表。添加(习惯);
}while(cursor.moveToNext());
}
返回习惯列表;
}
//删除单一习惯
公共习惯(习惯){
SQLiteDatabase db=this.getWritableDatabase();
db.delete(表,键ID+“=?”,
新字符串[]{String.valueOf(habity.getID())};
db.close();
}
}
下面是我的Listview适配器,其中每个项目都被放入自定义项目布局中:

public class HabitAdapter extends BaseAdapter {

    private ArrayList<Habit> habits;
    private Context context;
    private int layoutId;
    private long id1;

    public HabitAdapter(Context c, int LayoutId,ArrayList<Habit> habits) {
        this.context = c;
        this.layoutId = LayoutId;
        this.habits = habits;
    }

    @Override
    public int getCount() {
        return habits.size();
    }

    @Override
    public Habit getItem(int position) {
        return habits.get(position);
    }

    @Override
    public long getItemId(int position) {
        Habit habit = (Habit)habits.get(position);
        id1 = Long.parseLong(habit.getIDString());
        return id1;
    }

    public View getView(int pos, View child, ViewGroup parent) {
        Holder mHolder;
        LayoutInflater layoutInflater;
        Habit habit = habits.get(pos);
        if (child == null) {
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            child = layoutInflater.inflate(R.layout.fragment_start_habit_item, null);
            mHolder = new Holder();
            mHolder.title = (TextView)child.findViewById(R.id.fragment_title);
            mHolder.dayCount = (TextView)child.findViewById(R.id.fragment_days_left);
            mHolder.startDate = (TextView)child.findViewById(R.id.fragment_start_date);
            child.setTag(mHolder);
        } else {
            mHolder = (Holder) child.getTag();
        }
        mHolder.title.setText(habit.getName());
        mHolder.dayCount.setText("Days Completed: " + habit.getDayCountString());
        mHolder.startDate.setText("Date Started: " + habit.getStartDate());
        return child;
    }

    public class Holder {
        TextView title;
        TextView dayCount;
        TextView startDate;
    }

}
公共类适配器扩展BaseAdapter{
私人阿列主义习惯;
私人语境;
私人内部布局;
私人长id1;
公共居住区适应者(上下文c、内部布局、阵列列表习惯){
this.context=c;
this.layoutId=layoutId;
这就是习惯;
}
@凌驾
public int getCount(){
返回习惯。大小();
}
@凌驾
公共物品(内部位置){
返回习惯。获取(位置);
}
@凌驾
公共长getItemId(int位置){
习惯=(习惯)习惯。获取(位置);
id1=Long.parseLong(习惯.getIDString());
返回id1;
}
公共视图getView(内部位置、视图子级、视图组父级){
持有人mHolder;
LayoutInflater LayoutInflater;
习惯=习惯。获取(pos);
if(child==null){
layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
child=layoutInflater.flate(R.layout.fragment\u start\u havity\u item,null);
mHolder=新支架();
mHolder.title=(TextView)child.findViewById(R.id.fragment\u title);
mHolder.dayCo
 // Deleting Single Habit

public void deleteHabit(Habit habit) {
        SQLiteDatabase  database = this.getWritableDatabase();
            {
                database.execSQL("delete from " + "TABLE_HABITS"
                        + " where KEY_ID='" + String.valueOf(habit.getID())+ "'");
            }

        database .close();
    }
public float delete(String table,String colmName,String data) {
        // TODO Auto-generated method stub
        SQLiteDatabase db=dbhlpr.getWritableDatabase();
        String[] arr={data};
        colmName=colmName+"=?";
        float res=db.delete(table, colmName,arr );
        db.close();
        return res;
    }
public void deleteHabit(Habit habit) {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql = "delete from " + TABLE_HABITS + " where " 
                  + KEY_ID + "=" + habit.getID();
    db.rawQuery(sql,null);
    db.close();
}
public void deleteHabit(Habit habit) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_HABITS, KEY_ID+ "=" + habit.getID(), null);
    db.close();
}
public int setID(int id)
{
    return this._id;
}
public void setID(int id)
{
    this._id = id;
}