Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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
Java 使用SQLite-Android删除customAdapter extends BaseAdapter中的一行_Java_Android_Sqlite_Listview_Baseadapter - Fatal编程技术网

Java 使用SQLite-Android删除customAdapter extends BaseAdapter中的一行

Java 使用SQLite-Android删除customAdapter extends BaseAdapter中的一行,java,android,sqlite,listview,baseadapter,Java,Android,Sqlite,Listview,Baseadapter,我试图在我的SQLite数据库中获得一行,以便在单击按钮时删除。我成功地在ListView中删除了一行,但每次尝试从sqlite应用程序中删除时都会崩溃 dba.removeData(position); mModel.remove(position); notifyDataSetChanged(); 只删除ListView中的项,而不是数据库中的行 public class CustomAdapter extends BaseAdapter { private int custom_ada

我试图在我的SQLite数据库中获得一行,以便在单击按钮时删除。我成功地在ListView中删除了一行,但每次尝试从sqlite应用程序中删除时都会崩溃

dba.removeData(position);

mModel.remove(position);
notifyDataSetChanged();
只删除ListView中的项,而不是数据库中的行

public class CustomAdapter extends BaseAdapter {
private int custom_adapter;
private Context context;
private ArrayList<Model> mModel;
DatabaseHelper dba = new DatabaseHelper(this.context);

public CustomAdapter(Context context, int custom_adapter, ArrayList<Model> mModel) {
    this.context = context;
    this.mModel = mModel;
    this.custom_adapter = custom_adapter;

}




@Override
public int getCount() {

    return mModel.size();
}

@Override
public Object getItem(int position) {

    return mModel.get(position);
}

@Override
public long getItemId(int position) {

    return mModel.get(position).getId();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v = View.inflate(context, R.layout.custom_adapter, null);
    final TextView ID = (TextView) v.findViewById(R.id.textViewID);
    TextView przejechane = (TextView) v.findViewById(R.id.textViewPrzejechane);
    TextView spalone = (TextView) v.findViewById(R.id.textViewSpalanie);
    TextView zuzytePaliwo = (TextView) v.findViewById(R.id.textViewUzytepaliwo);
    final TextView dataView = (TextView) v.findViewById(R.id.textViewData);
    final Button btnDelete = (Button) v.findViewById(R.id.btnDelete);
    final ListView listView = (ListView) v.findViewById(R.id.listview);
    ID.setText(String.valueOf( mModel.get(position).getId()));
    przejechane.setText(String.valueOf( mModel.get(position).getAmount_km()));
    spalone.setText(String.valueOf( mModel.get(position).getAvg()));
    zuzytePaliwo.setText(String.valueOf( mModel.get(position).getAmount_fuel()));
    dataView.setText(String.valueOf( mModel.get(position).getData()));



    btnDelete.setTag(position);


    btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dba.removeData(position);

            mModel.remove(position);
            notifyDataSetChanged();

            }
    });

    return v;
}
这是我的数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {

private SQLiteDatabase mDatabase;
public static final String DATABASE_NAME = "AvgFuel.db";
public static final String TABLE_NAME = "avgFuel_table";

public static final String ID = "ID";
public static final String AMOUNT_FUEL = "AMOUNT_FUEL";
public static final String AMOUNT_KM = "AMOUNT_KM";
public static final String AVG = "AVG";
public static final String DATA = "DATA";
private static final String SELECT_PEOPLE = "SELECT * FROM " + TABLE_NAME;

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);

}



@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            AMOUNT_FUEL + " REAL, " + AMOUNT_KM + " REAL, " + AVG + " REAL, " + DATA + " TEXT" + ");");

}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

public boolean insertData(String amount_fuel, String amount_km, double avg){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(AMOUNT_FUEL,amount_fuel);
    contentValues.put(AMOUNT_KM,amount_km);
    contentValues.put(AVG,avg);
    contentValues.put(DATA,getNow());
    long result = db.insert(TABLE_NAME, null, contentValues);
    if (result == -1)
        return false;
    else
        return true;
}
public void removeData(int id){
    SQLiteDatabase db = this.getReadableDatabase();
    db.delete(TABLE_NAME, ID + "=" + id , null);
    db.close();
}

public ArrayList<Model> getModels() {
    ArrayList<Model> model = new ArrayList<Model>();
    mDatabase = this.getReadableDatabase();
    Cursor cursor = mDatabase.rawQuery(SELECT_PEOPLE, null);
    cursor.moveToNext();
    for (int i = 0; i <cursor.getCount() ; i++) {
        model.add(new Model(cursor.getInt(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4)));
        cursor.moveToNext();
    }
    cursor.close();
    mDatabase.close();
    return model;
}
public Model getModel(int id){
    mDatabase = this.getReadableDatabase();
    String s = "SELECT * FROM" + TABLE_NAME + "WHERE " + ID + "=" + id;
    Cursor cursor = mDatabase.rawQuery(s,null);
    cursor.moveToFirst();
    Model model = new Model(cursor.getInt(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4));
    cursor.close () ;
    mDatabase.close () ;
    return model ;
}
private String getNow(){
    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

尝试更改此..mModel.getposition.getId

 dba.removeData(mModel.get(position).getId());
我认为问题在于dba的创建。在这里,您只需使用此适配器上下文。这应该是您从活动中获得的内容

DatabaseHelper dba = new DatabaseHelper(this.context);
试着用这个

public CustomAdapter(Context context, int custom_adapter, ArrayList<Model> mModel) {
    this.context = context;
    this.mModel = mModel;
    this.custom_adapter = custom_adapter;
    dba = new DatabaseHelper(context);
}

希望这会有所帮助。

请在此处发布您的错误。当您调用dba.removeDataposition时,代码中出现错误;该位置的数组索引不是数据库的实际id。@AliasgarVadivala试图对空对象引用调用虚拟方法“android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabasejava.lang.String,int,android.database.sqlite.SQLiteDatabase$CursorFactory,android.database.DatabaseErrorHandler”,但我也犯了同样的错误。尝试在空对象referencedba=new DatabaseHelperthis.Context上调用虚拟方法“android.database.sqlite.sqlite.SQLiteDatabase$CursorFactory,android.database.DatabaseErrorHandler”;这一行调用adapter Constructor。我认为所有数据库操作都是由in activity或fragment类完成的,而不是adapter类完成的,因为如果在中执行adapter,则listview滚动需要时间来滚动。只接受一个答案。如果我的答案解决了你的问题,那么请在我的答案上标记为已接受。
dba.removeData(mModel.get(getAdapterPosition()).getId());