Autore Topic: SQLite errore  (Letto 964 volte)

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
SQLite errore
« il: 02 Agosto 2013, 23:16:42 CEST »
0
quando lancio l'activity ho questo errore:
Codice (Java): [Seleziona]
08-02 17:21:51.529: E/AndroidRuntime(1521): java.lang.RuntimeException: Unable to start activity ComponentInfo{le.mie.password/le.mie.password.ElencoPc}: java.lang.IllegalArgumentException: column '_id' does not exist
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.os.Looper.loop(Looper.java:137)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread.main(ActivityThread.java:5041)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at java.lang.reflect.Method.invokeNative(Native Method)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at java.lang.reflect.Method.invoke(Method.java:511)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at dalvik.system.NativeStart.main(Native Method)
08-02 17:21:51.529: E/AndroidRuntime(1521): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.widget.CursorAdapter.init(CursorAdapter.java:168)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.widget.CursorAdapter.<init>(CursorAdapter.java:116)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:52)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:78)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at le.mie.password.ElencoPc.onCreate(ElencoPc.java:35)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.Activity.performCreate(Activity.java:5104)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
08-02 17:21:51.529: E/AndroidRuntime(1521):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)

sembra che non trova il il campo "_ID " in realtà il campo non esiste nella tabella perchè il campo si chiama "_IDPC"
Non capisco perchè
Activity con l'errore:
Codice (Java): [Seleziona]
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._IDPC,Script.NOME_UTENTE_PC,Script.PASSWORD_PC,Script.NOTE_PC};
        int to[] = {R.id.tv_pci,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);
        listadb.setClickable(true); //rendiamo cliccabile la lista
       
        listadb.setOnItemClickListener(new AdapterView.OnItemClickListener() {
               
                public void onItemClick(AdapterView<?> parent, View v, int position, long idpc) {
                       
                        //otteniamo le informazioni che ci servono
                        TextView txtIdpc = (TextView) v.findViewById(R.id.tv_pci);
                       
                        String elemIdpcString = (String) txtIdpc.getText(); //otteniamo l'idpc che ci interessa
                       
                                int elemIdpcInt = Integer.parseInt(elemIdpcString);
                               
                                Database d = new Database(getApplicationContext());
                                d.cancellapc(elemIdpcInt); //cancelliamo l'elemento
                                d.close();
                       
                                c.requery(); //aggiorniamo la listview
                               
                        }
                });
       
        }
       
   
}

Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:SQLite errore
« Risposta #1 il: 03 Agosto 2013, 01:51:28 CEST »
0
Deve proprio chiamarsi _id: listview - Android column '_id' does not exist? - Stack Overflow

Al massimo puoi usare un alias se non vuoi cambiare la tabella.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:SQLite errore
« Risposta #2 il: 04 Agosto 2013, 00:21:26 CEST »
0
Ok ho risolto in altro modo...
ora non riesco a risolvere questo errore, sembra che sia alla riga 71 giusto???ma in quella riga c'è   listview.setAdapter(new ListAdapter(this));
Codice: [Seleziona]
08-03 22:17:46.388: E/AndroidRuntime(1795): FATAL EXCEPTION: main
08-03 22:17:46.388: E/AndroidRuntime(1795): java.lang.RuntimeException: Unable to resume activity {com.androidadvance.screen/com.androidadvance.screen.ViewRecordPc}: java.lang.NullPointerException
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.os.Handler.dispatchMessage(Handler.java:99)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.os.Looper.loop(Looper.java:137)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.main(ActivityThread.java:5041)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at java.lang.reflect.Method.invokeNative(Native Method)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at java.lang.reflect.Method.invoke(Method.java:511)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at dalvik.system.NativeStart.main(Native Method)
08-03 22:17:46.388: E/AndroidRuntime(1795): Caused by: java.lang.NullPointerException
08-03 22:17:46.388: E/AndroidRuntime(1795):         at com.androidadvance.screen.ViewRecordPc.onResume(ViewRecordPc.java:71)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.Activity.performResume(Activity.java:5182)
08-03 22:17:46.388: E/AndroidRuntime(1795):         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
08-03 22:17:46.388: E/AndroidRuntime(1795):         ... 12 more


Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:SQLite errore
« Risposta #3 il: 04 Agosto 2013, 09:19:46 CEST »
0
Qualche oggetto è null, posta il codice dell'onResume.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:SQLite errore
« Risposta #4 il: 04 Agosto 2013, 10:21:24 CEST »
0
eccolo:
Codice (Java): [Seleziona]
@Override
        protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();

                _productlist.clear();

                db = new DatabaseHelper(getApplicationContext());
                db.getWritableDatabase();
                ArrayList<ProductPc> product_listpc = db.getPc();

                for (int i = 0; i < product_listpc.size(); i++) {

                        String tidno = product_listpc.get(i).getIdno();

                        System.out.println("tidno>>>>>" + tidno);
                        String tname = product_listpc.get(i).getNomeutentepc();
                        String tprice = product_listpc.get(i).getPasswordpc();
                        String tnote = product_listpc.get(i).getNotepc();

                        ProductPc _ProductModel = new ProductPc();

                        _ProductModel.setIdno(tidno);
                        _ProductModel.setNomeutentepc(tname);
                        _ProductModel.setPasswordpc(tprice);
                        _ProductModel.setNotepc(tnote);

                        _productlist.add(_ProductModel);
                }
                totalrecordspc.setText("Total Records :-" + _productlist.size());
                listview.setAdapter(new ListAdapter(this));
                db.close();

        }

Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:SQLite errore
« Risposta #5 il: 04 Agosto 2013, 10:33:24 CEST »
0
Sicuro di aver dichiarato l'oggetto listview? Non lo trovo...

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:SQLite errore
« Risposta #6 il: 04 Agosto 2013, 16:05:41 CEST »
0
si l'ho dichiarato nell'OnCreate, eccolo:
Codice (Java): [Seleziona]
@Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.listview_pc);
                totalrecordspc = (TextView) findViewById(R.id.totalrecordspc);
                listview = (ListView) findViewById(R.id.listview);
        }

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:SQLite errore
« Risposta #7 il: 04 Agosto 2013, 16:19:45 CEST »
0
L'unico motivo valido per cui ti dia null pointer in quel punto è che la lista a cui fai riferimento non è presente nel layout.
Nell'oncreate dopo averla recuperata con il findViewById verifica se davvero è stata trovata, sospetto che sia null diversamente da quello che ti aspetti.

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:SQLite errore
« Risposta #8 il: 04 Agosto 2013, 17:42:11 CEST »
0



Post unito: 05 Agosto 2013, 16:54:08 CEST
tramite activity devo permettere di aggiornare i dati del db, ora quando effettuo l'update nel log ricevo "id null" (quindi non lo trova)
Sicuramente sarà una sciocchezza ma non riesco proprio a capire dove sbaglio.....
posto il codice per l'update:
Codice (Java): [Seleziona]
@Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.modifica_pc);

                i = getIntent();

                txtnomeutente = (EditText) findViewById(R.id.m_utente_pc);
                txtpassword = (EditText) findViewById(R.id.m_password_pc);
                txtnote = (EditText) findViewById(R.id.m_note_pc);

                txtnomeutente.setText(i.getExtras().getString("nomeutentepc"));
                txtpassword.setText(i.getExtras().getString("passwordpc"));
                txtnote.setText(i.getExtras().getString("notepc"));
                btn_updaterecord = (Button) findViewById(R.id.btn_updaterecord);
                btn_updaterecord.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
                // TODO Auto-generated method stub
                switch (v.getId()) {
                case R.id.btn_updaterecord:
                        if (txtnomeutente.getText().toString().equals("")
                                        || txtpassword.getText().toString().equals("")) {
                                Toast.makeText(ModificaPc.this, "Compila i campi..",
                                                Toast.LENGTH_LONG).show();
                        } else {

                                db = new DatabaseHelper(getApplicationContext());
                                db.getWritableDatabase();
                                pm = new ProductPc();
                                pm.nomeutentepc = txtnomeutente.getText().toString();
                                pm.passwordpc = txtpassword.getText().toString();
                                pm.notepc = txtnote.getText().toString();
                               
                                pm.idpc = i.getExtras().getString("id");

                                Log.i(">>>>>productid<<<<<", "" + i.getExtras().getString("id"));
                                db.updateProductpc(pm);
                                Toast.makeText(ModificaPc.this,
                                                "Account e Password PC modificati!", Toast.LENGTH_LONG)
                                                .show();

                                db.close();
                                super.onResume();

                        }
                        break;

la classe product pc:
Codice (Java): [Seleziona]
public class ProductPc {

        public String getNomeutentepc() {
                return nomeutentepc;
        }

        public void setNomeutentepc(String nomeutentepc) {
                this.nomeutentepc = nomeutentepc;
        }

        public String getPasswordpc() {
                return passwordpc;
        }

        public void setPasswordpc(String passwordpc) {
                this.passwordpc = passwordpc;
        }
       
        public String getNotepc() {
                return notepc;
        }
       
        public void setNotepc(String notepc) {
                this.notepc = notepc;
        }

        public String idpc="", nomeutentepc="", passwordpc="", notepc="";


        public String getIdpc() {
                return idpc;
        }

        public void setIdno(String idpc) {
                this.idpc = idpc;
        }

       
}
« Ultima modifica: 05 Agosto 2013, 16:54:29 CEST da Kecco11 »

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:SQLite errore
« Risposta #9 il: 05 Agosto 2013, 18:03:47 CEST »
0
Invece di usare
Codice (Java): [Seleziona]
 pm.idpc = i.getExtras().getString("id");usa preferibilmente
Codice (Java): [Seleziona]
 pm.idpc = i.getStringExtra("id");eviti potenziali null pointer exception imprevisti.

Per il problema nello specifico è difficile dire cosa non ti funziona, visto che il problema sembra legato a come lanci l'activity più che al pezzo di codice che hai postato. Vedendo quello che hai condiviso l'unica cosa che viene da dire è: quando hai lanciato l'activity con startActivity o startActivityForResult non hai aggiunto "id" tra gli extra dell'activity di lancio; come valorizzi l'intent quando fai lo startActivity?

Offline Kecco11

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    GS4
Re:SQLite errore
« Risposta #10 il: 05 Agosto 2013, 18:13:58 CEST »
0
è vero grazie mille!! non avevo aggiunto l'id e quindi era null!!!!
Grazie a presto  ;-)