Autore Topic: Cancellare dati da database sql  (Letto 276 volte)

Offline gegeuxa

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Cancellare dati da database sql
« il: 10 Settembre 2016, 17:06:19 CEST »
0
Ho creato una listview che mostra dei dati salvati in un database, ma quando ne cancello uno appena rientro nell'activity è come se non lo avesse cancellato

Parte di Activity:
Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.impegni);

        mydb = new DBHelper(this);
        obj = (ListView) findViewById(R.id.listView);
        final ArrayList array_list = mydb.getAllImpegni();
        final ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.adapter_prova, R.id.textView9, array_list);
        obj.setAdapter(arrayAdapter);
        obj.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {

                String selectedItem=(String) (obj.getItemAtPosition(i));
                final int itemId=array_list.indexOf(selectedItem);
                AlertDialog.Builder builder=new AlertDialog.Builder(ActivityImpegni.this);
                builder.setMessage("Vuoi ancellare questo obiettivo?")
                        .setPositiveButton("Si", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                mydb.deleteContact(itemId);
                                arrayAdapter.remove(array_list.get(i));
                                arrayAdapter.notifyDataSetChanged();
                                Toast.makeText(getApplicationContext(), "Cancellato!", Toast.LENGTH_SHORT).show();
                            }
                        })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        // User cancelled the dialog
                    }
                });
                AlertDialog d=builder.create();
                d.setTitle("Cancellare?");
                d.show();
            }
        });
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }

Classe SQLiteOpenHelper:
Codice (Java): [Seleziona]
public class DBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "MyDBName.db";
    public static final String CONTACTS_TABLE_NAME = "Impegni";
    public static final String CONTACTS_COLUMN_ID = "id";
    public static final String CONTACTS_COLUMN_NAME = "Impegno";
    private HashMap hp;

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

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL("create table Impegni"+"(id integer primary key, Impegno text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS Impegni");
        onCreate(db);
    }

    public boolean insertImpegno (String impegno){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("Impegno",impegno);
        db.insert("Impegni",null,contentValues);
        return true;
    }

    public Cursor getData(int id){
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select * from Impegni where id="+id+"", null );
        return res;
    }

    public int numberOfRows(){
        SQLiteDatabase db = this.getReadableDatabase();
        int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
        return numRows;
    }

    public Integer deleteContact (Integer id)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete("Impegni", "id = ? ", new String[] { String.valueOf(id) });
    }

    public ArrayList<String> getAllImpegni(){

        ArrayList<String> array_list = new ArrayList<String>();
        hp = new HashMap();
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select * from Impegni", null );
        res.moveToFirst();

        while(res.isAfterLast() == false){
            array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
            res.moveToNext();
        }

        return array_list;
    }

}

Credo che il problema sia nella funzione deleteContact, ma non capisco quale sia

Offline capitancooker

  • Utente junior
  • **
  • Post: 56
  • Marco
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5, Asus Zenpad S 8.0
  • Sistema operativo:
    Mac OSX El Capitan
Re:Cancellare dati da database sql
« Risposta #1 il: 10 Settembre 2016, 20:58:50 CEST »
0
A prima vista sembra che l'id del record possa non corrispondere alla voce che vuoi cancellare, usi la posizione nell'array come id ma non è detto che sia il valore nel database.

Se la voce "Impegno" è univoca potresti cancellare il record direttamente con il nome dell'elemento usando questo metodo:
Codice (Java): [Seleziona]
 public Integer deleteImpegno (String impegno)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete("Impegni", "Impegno = ? ", new String[] { impegno});
    }

Altrimenti devi rivedere il codice utilizzando un ArrayList con due elementi (id e impegno) customizzando l'adapter.

Ciao,
Marco
Se sbaglio, correggetemi.

Offline gegeuxa

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Cancellare dati da database sql
« Risposta #2 il: 11 Settembre 2016, 11:33:31 CEST »
0
Grazie 1000 funziona, anche se a volte l' app crasha, ma non so se la causa è il nuovo metodo... posto comunque il logcat, casomai qualcuno abbia voglia di rispondere:

Codice: [Seleziona]
09-11 11:30:35.294 28853-28853/com.example.eugenioanselmino.myrelation I/Xposed: java.lang.NoSuchMethodError: com.example.eugenioanselmino.myrelation.ActivityImpegni#convertFromTranslucent()#bestmatch
                                                                                     at de.robv.android.xposed.XposedHelpers.findMethodBestMatch(XposedHelpers.java:233)
                                                                                     at de.robv.android.xposed.XposedHelpers.findMethodBestMatch(XposedHelpers.java:284)
                                                                                     at de.robv.android.xposed.XposedHelpers.callMethod(XposedHelpers.java:947)
                                                                                     at us.shandian.mod.swipeback.app.SwipeBackActivityHelper.convertActivityFromTranslucent(SwipeBackActivityHelper.java:126)
                                                                                     at us.shandian.mod.swipeback.app.SwipeBackActivityHelper.onPostCreate(SwipeBackActivityHelper.java:75)
                                                                                     at us.shandian.mod.swipeback.hook.ModSwipeBack$100000001.afterHookedMethod(ModSwipeBack.java:121)
                                                                                     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:645)
                                                                                     at android.app.Activity.onPostCreate(Native Method)
                                                                                     at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1142)
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2046)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2088)
                                                                                     at android.app.ActivityThread.access$600(ActivityThread.java:134)
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                     at android.os.Looper.loop(Looper.java:137)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:4744)
                                                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                     at java.lang.reflect.Method.invoke(Method.java:511)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                                     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
                                                                                     at dalvik.system.NativeStart.main(Native Method)

Offline joefermati

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    win 10
Re:Cancellare dati da database sql
« Risposta #3 il: 28 Settembre 2016, 14:49:48 CEST »
+1
L'app crasha perché non trova questi metodi

#convertFromTranslucent()#bestmatch

in

ActivityImpegni.

Controlla se esistono in quell'activity, se sono public o private, e posta il codice completo di ActivityImpegni.


Offline gegeuxa

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Cancellare dati da database sql
« Risposta #4 il: 29 Settembre 2016, 18:56:14 CEST »
0
Ho risolto grazie mille counque :-)