2017-05-07 1 views
-2

Je crée un panier dans mon application. J'utilise sqlite pour stocker les valeurs dans une table pour récupérer ce que la personne a ajouté.Supprimer une ligne dans une liste personnalisée à l'aide de SQLITE

J'ai ajouté un bouton pour chaque ligne, de sorte que quand ils cliquent sur ce bouton, il supprimera la ligne de la liste et ses données de la table. Mais comment appeler ma fonction de suppression lorsque je clique sur le bouton? Merci d'avance!

ceci est ma classe Adaptateur:

public class ListCartAdapter extends BaseAdapter { 

private Context context; 

private ArrayList<String> orderid; 
private ArrayList<String> orderName; 
private ArrayList<String> orderSize; 
private ArrayList<String> orderQuantity; 

public ListCartAdapter(Context context, ArrayList<String> orderid, ArrayList<String> orderName, ArrayList<String> orderSize, ArrayList<String> orderQuantity){ 
    // public ListCartAdapter(Context context, ArrayList<String> orderName){ 
    this.context = context; 
    this.orderid = orderid; 
    this.orderName = orderName; 
    this.orderSize = orderSize; 
    this.orderQuantity = orderQuantity; 


} 

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

@Override 
public Object getItem(int position) { 
    return orderName.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View listView; 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listView = inflater.inflate(R.layout.cart_list_item, null); 

    TextView number = (TextView) listView.findViewById(R.id.textID); 
    TextView name = (TextView) listView.findViewById(R.id.textOrderName); 
    TextView size = (TextView) listView.findViewById(R.id.textOrderSize); 
    TextView quantity = (TextView) listView.findViewById(R.id.textOrderQuantity); 

    ImageButton btnRemove = (ImageButton) listView.findViewById(R.id.btnRemove); 

    number.setText(orderid.get(position)); 
    name.setText(orderName.get(position)); 
    size.setText(orderSize.get(position)); 
    quantity.setText(orderQuantity.get(position)); 

    //BUTTON TO REMOVE ROW 
    btnRemove.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      orderName.remove(position); 
      notifyDataSetChanged(); 

     } 
    }); 

    return listView; 
} 

et ceci est mon CLASSE SQLITEHELPER:

public static final String DB_NAME = "CartDB"; 
public static final String TABLE_NAME = "Orders"; 
public static final String COLUMN_ID = "id"; 
public static final String NAME ="name"; 
public static final String SIZE ="size"; 
public static final String QUANTITY ="quantity"; 

private static final int DB_VERSION = 1; 

public cartDatabaseHelper(Context context) 
{ 
    super(context,DB_NAME,null,DB_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    String sql = "CREATE TABLE " + TABLE_NAME 
      + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + NAME + " VARCHAR, " 
      + SIZE + " VARCHAR, " 
      + QUANTITY + " VARCHAR);"; 

       db.execSQL(sql); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    String sql = "DROP TABLE IF EXIST Orders"; 
    db.execSQL(sql); 
    onCreate(db); 
} 

public boolean addPerson(String name, String size, String quantity){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 

    contentValues.put(NAME,name); 
    contentValues.put(SIZE,size); 
    contentValues.put(QUANTITY,quantity); 

    long result = db.insert(TABLE_NAME,null ,contentValues); 
    if(result == -1) 
     return false; 
    else 
     return true; 
} 


public Cursor getListContents(){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 
    return data; 
} 


public void removeSingleContact(String id) { 
    SQLiteDatabase database = this.getWritableDatabase(); 

    database.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + "= '" + id + "'"); 

    //Close the database 
    database.close(); 
} 
+1

' "OU" + column_id + « = '"+ id +"' ");' id est un ** INTEGER **. Ne le traitez pas comme s'il s'agissait d'un ** STRING **. –

+0

@Rotwang Ok, je vais garder ça à l'esprit. Comment pensez-vous que j'aborderais ce problème monsieur? –

+1

En outre, l'injection SQL est mauvaise. En savoir plus sur la méthode 'database.delete' –

Répondre

0

Eh bien, je résolu ma question: DI ne sais toujours pas pourquoi je downvoted, mais qui se soucie.

C'est le moyen d'appeler votre SqliteHelper dans votre classe d'adaptateur, ajoutez ce code

final cartDatabaseHelper db = new cartDatabaseHelper(context); 

J'espère que cela aide les autres personnes avec ce problème: D