Autore Topic: Recupero dell\'_id (primary key) del DataBase  (Letto 286 volte)

Offline Friz02

  • Utente junior
  • **
  • Post: 104
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3 neo Samsung
  • Sistema operativo:
    windows 7
Recupero dell\'_id (primary key) del DataBase
« il: 08 Marzo 2015, 12:52:27 CET »
0
Salve a tutti,
all'interno della mia applicazione c'è una listview che riporta i dati di un database.
L'utente ha la possibilità di cancellare un'intera riga del database con il comando "elimina" mediante un long press del ContextMenu, il problema è che la riga in questione viene individuata tramite il riferimento alla posizione della listview, quindi 0, 1, 2, ecc....mentre il comando di "delate" sul database fa riferimento all'_id (chiave primaria) che invece parte da 1, 2, 3, ....ecc.
Pertanto se decido di cancellare l'elemento che sta sulla posizione 2 della listview verrà invece cancellato l'elemento corrispondente alla riga n°3 del database.
Codice (Java): [Seleziona]
public boolean onContextItemSelected(MenuItem item)
    {
        int id=item.getItemId();
        AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

        switch (id) {
            case R.id.elimina:
                int position=info.position;
                dbManager.deleteProgetto(position);                
                cursorAdapter.swapCursor(dbManager.getProject());
                break;
        }
        return super.onContextItemSelected(item);
    }

e

Codice (Java): [Seleziona]
public void deleteProgetto(int position)
    {
        SQLiteDatabase db=helper.getWritableDatabase();
        db.delete("projectname","_id=" +position, null);
    }

Potrei incrementare la variabile "position" di 1 quando la passo al metodo "deleteProgetto(int position)", ma risolvo il problema solo la prima volta, poi nelle "cancellazioni" seguenti il problema ritorna.
Ho allora pensato di utilizzare il metodo "update(projectname", values, "_id="...., ....)", ma sorgono altri problemi.
In definitiva sarebbe perfetto passare al metodo deleteProgetto(int position) non la posizione "position" della listview, ma l'_id della riga del database .....ma non saprei come fare.

Post unito: 08 Marzo 2015, 17:21:53 CET
Ho risolto con:
Codice (Java): [Seleziona]
   public void deleteProgetto(int position)
    {
        SQLiteDatabase db=helper.getWritableDatabase();
        Cursor crs = db.query("projectname",null,null,null,null,null,null);
        exit:
        while (crs.moveToNext()) {
            if (crs.moveToPosition(position)) {
                String delateRow = crs.getString(crs.getColumnIndex("_id"));
                db.delete("projectname", "_id=?", new String[]{delateRow});
                Log.d("delateRow", "delateRow: " + delateRow);
                break exit;
            }
        }
    }
« Ultima modifica: 08 Marzo 2015, 17:21:53 CET da Friz02, Reason: Merged DoublePost »