Autore Topic: pulsante elimina record  (Letto 686 volte)

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
pulsante elimina record
« il: 01 Agosto 2013, 00:08:51 CEST »
0
ho inserito questo codice per eliminare tramite button un record della listview:
Codice (Java): [Seleziona]
public void deleteItem(View v) {
                        RelativeLayout rl = (RelativeLayout) v.getParent();
                        TextView tv = (TextView) rl.findViewById(R.id.tv_id_banca);
                        String id = tv.getText().toString();

                        SQLiteDatabase db = mHelper.getWritableDatabase();
                        db.delete(Script.TABLE_BANCA, Script._ID + "='" + id + "'", null);
                        db.close();

                        finish();
                        startActivity(getIntent());
               
                }

se richiamo deleteItem nel OnClick del button da errore. Scusate ma sono proprio alle prime armi, grazie per l'aiuto!

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:pulsante elimina record
« Risposta #1 il: 01 Agosto 2013, 02:12:37 CEST »
0
Per eliminare un record di una listView, secondo me, conviene eliminare l'elemento dall'adapter che popola la listview e subito dopo chiamare sull'adapter il metodo notifyDataSetChanged(). In automatico la lista viene aggiornata.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:pulsante elimina record
« Risposta #2 il: 01 Agosto 2013, 17:29:52 CEST »
0
perchè questo errore??
Codice: [Seleziona]
08-01 15:26:37.864: E/AndroidRuntime(1535): java.lang.IllegalStateException: Could not execute method of the activity


Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:pulsante elimina record
« Risposta #3 il: 01 Agosto 2013, 17:47:45 CEST »
0
perchè questo errore??
Codice: [Seleziona]
08-01 15:26:37.864: E/AndroidRuntime(1535): java.lang.IllegalStateException: Could not execute method of the activity


Non è quella la riga del logcat che individua l'errore, se non posti tutto è impossibile capirci qualcosa. E sinceramente anche il metodo postato nel primo post mica l'ho capito tanto a cosa serve

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:pulsante elimina record
« Risposta #4 il: 01 Agosto 2013, 17:53:43 CEST »
0
il codice serve per eliminare un record del db che visualizzo nella listview, ti posto il log..
Codice: [Seleziona]
08-01 15:26:37.864: E/AndroidRuntime(1535): java.lang.IllegalStateException: Could not execute method of the activity
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.view.View$1.onClick(View.java:3599)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.view.View.performClick(View.java:4204)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.view.View$PerformClick.run(View.java:17355)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.os.Handler.handleCallback(Handler.java:725)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.os.Handler.dispatchMessage(Handler.java:92)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.os.Looper.loop(Looper.java:137)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.app.ActivityThread.main(ActivityThread.java:5041)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at java.lang.reflect.Method.invokeNative(Native Method)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at java.lang.reflect.Method.invoke(Method.java:511)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at dalvik.system.NativeStart.main(Native Method)
08-01 15:26:37.864: E/AndroidRuntime(1535): Caused by: java.lang.reflect.InvocationTargetException
08-01 15:26:37.864: E/AndroidRuntime(1535):         at java.lang.reflect.Method.invokeNative(Native Method)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at java.lang.reflect.Method.invoke(Method.java:511)
08-01 15:26:37.864: E/AndroidRuntime(1535):         at android.view.View$1.onClick(View.java:3594)
08-01 15:26:37.864: E/AndroidRuntime(1535):         ... 11 more
08-01 15:26:37.864: E/AndroidRuntime(1535): Caused by: java.lang.NullPointerException
08-01 15:26:37.864: E/AndroidRuntime(1535):         at le.mie.password.ElencoPc.deleteItem(ElencoPc.java:72)
08-01 15:26:37.864: E/AndroidRuntime(1535):         ... 14 more

posto anche tutta la'ctivity:
Codice: [Seleziona]
ListView listaDb;
        private DBHelper mHelper;
       
        public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                setContentView(R.layout.el_pc);
               
                 //otteniamo i risultati del database
        Database d = new Database(getApplicationContext());
       
        final Cursor c = d.ottieniProdottiPC(); //otteniamo i prodotti
       
        startManagingCursor(c); //diamo il cursore in pasto al parser delle API di Android
       
      //creiamo le associazioni tra campi e colonne
        String from[] = {Script.NOME_UTENTE_PC,Script.PASSWORD_PC,Script.NOTE_PC};
        int to[] = {R.id.tv_utente_pc,R.id.tv_password_pc,R.id.tv_note_pc};
       
        //creiamo il SimpleAdapter che si occuperà di collegare i nostri dati alla listView
        SimpleCursorAdapter sca = new SimpleCursorAdapter(this /*context*/,
                        R.layout.dettagli_pc /*specifichiamo il layout che vogliamo*/,
                        c /*il cursore che contiene i nostri dati*/,
                        from,to);
       
      //lo associamo al layout
        listaDb = (ListView) findViewById(R.id.list_p);
        listaDb.setAdapter(sca);
     
                        }
        public void deleteItem(View v) {
                RelativeLayout rl = (RelativeLayout) v.getParent();
                TextView tv = (TextView) rl.findViewById(R.id.id_carta_dettaglio);
                String id = tv.getText().toString();

                SQLiteDatabase db = mHelper.getWritableDatabase();
               
                db.delete(Script.TABLE_PC, Script._ID + "='" + id + "'", null);
                db.close();

                finish();
                startActivity(getIntent());
               
        }

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:pulsante elimina record
« Risposta #5 il: 01 Agosto 2013, 18:21:35 CEST »
0
Che cosa c'è alla riga 72 del file ElencoPC.java ?

Citazione da: Logcat
                                                                         Caused by: java.lang.NullPointerException
08-01 15:26:37.864: E/AndroidRuntime(1535):         at le.mie.password.ElencoPc.deleteItem(ElencoPc.java:72)

Andando a naso, probabilmente la View che passi al metodo deleteItem è nulla...comunque il problema del crash è una variabile non inizializzata e quindi nulla.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:pulsante elimina record
« Risposta #6 il: 01 Agosto 2013, 18:32:22 CEST »
0
in quella riga c'è il metodo       SQLiteDatabase db = mHelper.getWritableDatabase();
come posso risolvere??