Autore Topic: problema my db  (Letto 411 volte)

Offline Fraa89

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
problema my db
« il: 23 Dicembre 2011, 14:38:21 CET »
0
Ciao a tutti ho un problema con il mio programma, praticamente un'errore nel caricamento dei dati all'interno del database.
Tengo a precisare che il database l'ho pres o da un tutorial qui nel forum.
L'errore secondo il logcat mi viene dato alla memorizzazione dell'ultimo parametro. Magari ho sbagliato tutto, mi dareste una mano? :D
Posto LogCat e Codice del database. Esso viene richiamato da un'altra attività tramite la pressione di un tasto salva.
Codice (Java): [Seleziona]
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class MyDatabase {  

        SQLiteDatabase mDb;
        DbHelper mDbHelper;
        Context mContext;
        private static final String DB_NAME="Dati";//nome del db
        private static final int DB_VERSION=1; //numero di versione del nostro db
       
        public MyDatabase(Context ctx){
                mContext=ctx;
                mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
        }
       
        public void open(){  //il database su cui agiamo è leggibile/scrivibile
                mDb=mDbHelper.getWritableDatabase();
               
        }
       
        public void close(){ //chiudiamo il database su cui agiamo
                mDb.close();
        }
       
       
        //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione
       
        public void insertProduct(String qualifica,String categoria,String cod,
                        String partita,String paese,String via,String stadio,String rimborso){ //metodo per inserire i dati
                ContentValues cv=new ContentValues();
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, qualifica);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, categoria);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, cod);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, partita);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, paese);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, via);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, stadio);
                cv.put(ProductsMetaData.PRODUCT_NAME_KEY, rimborso);
                mDb.insert(ProductsMetaData.PRODUCTS_TABLE, null, cv);
        }
       
        public Cursor fetchProducts(){ //metodo per fare la query di tutti i dati
                return mDb.query(ProductsMetaData.PRODUCTS_TABLE, null,null,null,null,null,null);              
        }

        static class ProductsMetaData {  // i metadati della tabella, accessibili ovunque
                static final String PRODUCTS_TABLE = "Designazione";
                static final String ID = "_id";
               
                static final String PRODUCT_NAME_KEY = "cod";
                static final String PRODUCT_PRICE_KEY = "price";
        }

        private static final String PRODUCTS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
                        + ProductsMetaData.PRODUCTS_TABLE + " ("
                        + ProductsMetaData.ID+ " integer primary key autoincrement, "
                        + ProductsMetaData.PRODUCT_NAME_KEY + " text not null, "
                        + ProductsMetaData.PRODUCT_PRICE_KEY + " integer not null);";

        private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

                public DbHelper(Context context, String name, CursorFactory factory,int version) {
                        super(context, name, factory, version);
                }

                @Override
                public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
                        _db.execSQL(PRODUCTS_TABLE_CREATE);
                }

                @Override
                public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                        //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

                }
               
               

        }
               

}
Codice: [Seleziona]
12-23 13:34:05.613: INFO/ActivityManager(43): Displayed android.google/.ArbitroGActivity: +2s87ms (total +52s305ms)
12-23 13:34:05.663: INFO/ActivityManager(43): Displayed com.android.launcher/com.android.launcher2.Launcher: +52s353ms
12-23 13:35:59.184: INFO/InputReader(43): Device reconfigured: id=0x0, name=qwerty2, display size is now 480x800
12-23 13:35:59.184: INFO/InputManager-Callbacks(43): No virtual keys found for device qwerty2.
12-23 13:35:59.884: INFO/ARMAssembler(43): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x43d6f520:0x43d6f6d8] in 1122138 ns
12-23 13:35:59.994: INFO/ARMAssembler(43): generated scanline__00000077:03515104_00001004_00000000 [ 65 ipp] (85 ins) at [0x43d6f6e0:0x43d6f834] in 862724 ns
12-23 13:36:00.153: INFO/ARMAssembler(43): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x43d6f838:0x43d6fa00] in 872537 ns
12-23 13:36:01.364: INFO/ActivityManager(43): Starting: Intent { cmp=android.google/.Designazione } from pid 341
12-23 13:36:01.584: INFO/ActivityDesignazione(341): Activity Designazione Creata
12-23 13:36:02.224: INFO/ActivityManager(43): Displayed android.google/.Designazione: +821ms
12-23 13:36:03.593: INFO/Spinner(341): Entra in onClick
12-23 13:36:03.604: INFO/Spinner(341): Dati Spinner Inseriti
12-23 13:36:03.763: ERROR/Database(341): Error inserting cod=
12-23 13:36:03.763: ERROR/Database(341): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
12-23 13:36:03.763: ERROR/Database(341):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
12-23 13:36:03.763: ERROR/Database(341):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
12-23 13:36:03.763: ERROR/Database(341):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
12-23 13:36:03.763: ERROR/Database(341):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
12-23 13:36:03.763: ERROR/Database(341):     at android.google.MyDatabase.insertProduct(MyDatabase.java:47)
12-23 13:36:03.763: ERROR/Database(341):     at android.google.Designazione$1.onClick(Designazione.java:101)
12-23 13:36:03.763: ERROR/Database(341):     at android.view.View.performClick(View.java:2485)
12-23 13:36:03.763: ERROR/Database(341):     at android.view.View$PerformClick.run(View.java:9080)
12-23 13:36:03.763: ERROR/Database(341):     at android.os.Handler.handleCallback(Handler.java:587)
12-23 13:36:03.763: ERROR/Database(341):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-23 13:36:03.763: ERROR/Database(341):     at android.os.Looper.loop(Looper.java:123)
12-23 13:36:03.763: ERROR/Database(341):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-23 13:36:03.763: ERROR/Database(341):     at java.lang.reflect.Method.invokeNative(Native Method)
12-23 13:36:03.763: ERROR/Database(341):     at java.lang.reflect.Method.invoke(Method.java:507)
12-23 13:36:03.763: ERROR/Database(341):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-23 13:36:03.763: ERROR/Database(341):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-23 13:36:03.763: ERROR/Database(341):     at dalvik.system.NativeStart.main(Native Method)
12-23 13:36:03.763: INFO/DB(341): Inseriti dati nel db
12-23 13:36:03.763: INFO/prova(341): prova
12-23 13:36:03.774: INFO/Chiusura(341): Chiuso DB
12-23 13:36:03.774: INFO/Cliccato Salva(341): Cliccato Bottone di salvataggio nel database
12-23 13:36:03.774: INFO/ActivityManager(43): Starting: Intent { cmp=android.google/.Visualizzazione } from pid 341
12-23 13:36:04.123: DEBUG/dalvikvm(341): GC_EXTERNAL_ALLOC freed 138K, 51% free 2683K/5447K, external 805K/1038K, paused 81ms
12-23 13:36:05.263: INFO/ActivityManager(43): Displayed android.google/.Visualizzazione: +1s415ms
12-23 13:36:09.933: WARN/KeyCharacterMap(341): No keyboard for id 0
12-23 13:36:09.933: WARN/KeyCharacterMap(341): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-23 13:38:41.903: DEBUG/SntpClient(43): request time failed: java.net.SocketException: Address family not supported by protocol



Vi riporto anche il codice di richiamo del database

Codice (Java): [Seleziona]
 MyDatabase db=new MyDatabase(getApplicationContext());
                db.open();  //apriamo il db
               
               
                if(db.fetchProducts().getCount()==0){//inserimento dati
               
                        db.insertProduct(qual,cat,dati[0].getText().toString(),dati[1].getText().toString(),
                                        dati[2].getText().toString(),dati[3].getText().toString(),
                                        dati[4].getText().toString(),dati[5].getText().toString());
                        Log.i("DB","Inseriti dati nel db");
                       
               
                }
               
                Log.i("prova","prova");

                Cursor c=db.fetchProducts(); // query
                startManagingCursor(c);
               
               
                                /*Intent intent=new Intent(); ;
                               
                               
                             startActivity(intent); */


                               
               
               
               
               /* SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                                this,
                                R.layout.product, //il layout di ogni riga/prodotto
                                c,
                                new String[]{MyDatabase.ProductsMetaData.PRODUCT_NAME_KEY,MyDatabase.ProductsMetaData.PRODUCT_PRICE_KEY},//questi colonne
                                new int[]{R.id.nameTv,R.id.priceTv});//in queste views*/

               
               

               
               
            //    productsLv.setAdapter(adapter); //la listview ha questo adapter
               
               
                //qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview
               
            /*    int nameCol=c.getColumnIndex(MyDatabase.ProductsMetaData.PRODUCT_NAME_KEY);  //indici delle colonne
                int priceCol=c.getColumnIndex(MyDatabase.ProductsMetaData.PRODUCT_PRICE_KEY);      
               
                if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                        do {
                                       
                                productsTv.append("Product Name:"+c.getString(nameCol)+", Price:"+c.getInt(priceCol)+"\n"); //estrazione dei dati dalla entry del cursor
                                               
                                } while (c.moveToNext());//iteriamo al prossimo elemento
                }*/

               
                db.close();
               
                Log.i("Chiusura","Chiuso DB");
               
/*
                getWindow().setFormat(PixelFormat.RGBA_8888);   //visto che usiamo i gradient, usiamo questo trick (vedi snippet forum)
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);  
               
                productsLv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
                productsTv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
                //definizione ed uso di gradient in modo programmatico
               
               
                //animazioni in modo programmatico (vedi snippet forum)
                Animation a1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
                a1.setDuration(1000);
                a1.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
                productsLv.startAnimation(a1);
                //entra dal sotto
               
               
                Animation a2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
                a2.setDuration(1000);
                a2.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
                productsTv.startAnimation(a2);
                //entra dal sopra
                ///////////////////////////////////////////////
                   
                    */
« Ultima modifica: 23 Dicembre 2011, 14:44:13 CET da Fraa89 »

Offline lolla

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:problema my db
« Risposta #1 il: 10 Febbraio 2012, 09:37:53 CET »
0
Salve, ho lo stesso identico errore, non so come mettere a posto.

Qualcuno ne sa niente?

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:problema my db
« Risposta #2 il: 10 Febbraio 2012, 10:19:27 CET »
+1
Nel codice che ha postato Fraa89 è molto semplice, ha creato il database copiando il codice, quindi viene creata una tabella con 2 colonne come nell'esempio.

Poi cercava di riempirla con 10 colonne.

Apri un thread con il tuo codice cosi diventa piu faciel aiutarti.

« Ultima modifica: 10 Febbraio 2012, 10:46:16 CET da Qlimax »

Offline Fraa89

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:problema my db
« Risposta #3 il: 11 Febbraio 2012, 21:32:00 CET »
0
Ciao ho visto che hai problemi con il db, io ho risolto quel problema e ha ragione xWOLKx dicendo che avevo fatto un copia e incolla non capendo poi quello che era stato fatto, ma sbattendoci il naso ho capito il codice e anzi l'ho rifatto da zero in un modo migliore formando una piccola interfaccia prima rendendo il codice facile da usare e più leggibile. Se vuoi ne possiamo discutere. Comunque se ti serve una mano sul tuo codice postalo e cerchiamo di vederlo ;)