Autore Topic: query in thread  (Letto 718 volte)

Offline MrFelix

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Zenithink
  • Sistema operativo:
    Linus Torvalds, Richard Stallman grazie :D
query in thread
« il: 11 Ottobre 2010, 15:08:22 CEST »
0
Ok, prima di tutto il codice:

questo è il db creato se non ricordo male sulle orme di quello del tutorial di questo sito:
Codice (Java): [Seleziona]
public class DataBase {  

    SQLiteDatabase dB;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="tutorialdb";//nome del db
    private static final int DB_VERSION=1; //numero di versione del nostro db
   
    public DataBase(Context ctx){
            mContext=ctx;
            mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
    }
   
//il database su cui agiamo è leggibile/scrivibile
    public void open(){  
            dB=mDbHelper.getWritableDatabase();
           
    }
   
//chiudiamo il database su cui agiamo
    public void close(){
            dB.close();
    }

//metodo per inserire i dati
    public void insertProduct(String id, String ip, String user, String pwd){
            ContentValues cv=new ContentValues();
            cv.put(ProductsMetaData.DVR_ID_KEY, id);
            cv.put(ProductsMetaData.DVR_IP_KEY, ip);
            cv.put(ProductsMetaData.DVR_USER_KEY, user);
            cv.put(ProductsMetaData.DVR_PWD_KEY, pwd);
            dB.insert(ProductsMetaData.TITLE_TABLE, null, cv);
    }
   
//metodo per fare la query di tutti i dati
    public Cursor fetchProducts(){
            return dB.query(ProductsMetaData.TITLE_TABLE, null,null,null,null,null,null);              
    }

//Metodo per cancellare titoli
    public boolean deleteTitle(String rowId)
    {
        return dB.delete(ProductsMetaData.TITLE_TABLE, ProductsMetaData.ID + "=" + rowId, null) > 0;
    }

//Metodo identificatore sorgente mex TCP mediante una query
   public Cursor getTitle(String sandro) throws SQLException
    {
     
        Cursor mCursor =
                dB.query(true, ProductsMetaData.TITLE_TABLE, new String[] {
                                                            ProductsMetaData.ID,
                                                            ProductsMetaData.DVR_IP_KEY,
                                                            ProductsMetaData.DVR_ID_KEY,
                                                            ProductsMetaData.DVR_USER_KEY,
                                                            ProductsMetaData.DVR_PWD_KEY,
                },
                ProductsMetaData.DVR_ID_KEY + "=" + "'"+sandro+"'",null,null,null,null,null);//Ricordarsi l'ovvio: quando si fanno query con variabili di tipo string, racchiuderle negli apici!!!una mattinata buttata....porca eva
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
       
        return mCursor;  
    }  
 
//i metadati della tabella, accessibili ovunque
    static class ProductsMetaData {  
            static final String TITLE_TABLE = "dvr";
            static final String ID = "_id";
            static final String DVR_ID_KEY = "id";
            static final String DVR_IP_KEY = "ip";
            static final String DVR_USER_KEY="user";
            static final String DVR_PWD_KEY="pwd";
}
   
//codice sql di creazione della tabella
    private static final String PRODUCTS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  
                    + ProductsMetaData.TITLE_TABLE + " ("
                    + ProductsMetaData.ID+ " integer primary key autoincrement, "
                    + ProductsMetaData.DVR_ID_KEY + " text not null, "
                    + ProductsMetaData.DVR_IP_KEY + " text not null, "
                    + ProductsMetaData.DVR_USER_KEY + " text not null, "
                    + ProductsMetaData.DVR_PWD_KEY + " text not null);" ;
//classe che ci aiuta nella creazione del db
    private class DbHelper extends SQLiteOpenHelper {

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

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

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

            }

    }
           

}

questa è la chiamata nel thread:
Codice (Java): [Seleziona]
 if (i==0){
                    DataBase db=new DataBase(getApplicationContext  ())
                    Log.d("TCPdb","i=0");
                try{
                db.open();
                Log.d("TCPdb","open db");
                Cursor c = db.getTitle(tokens[i]);
                Log.d("TCPdb","inizio estrazione ind metadati");
                int IDCol=c.getColumnIndex(DataBase.ProductsMetaData.DVR_ID_KEY);
                int IPCol=c.getColumnIndex(DataBase.ProductsMetaData.DVR_IP_KEY);
                int USERCol=c.getColumnIndex(DataBase.ProductsMetaData.DVR_USER_KEY);
                int PWDCol=c.getColumnIndex(DataBase.ProductsMetaData.DVR_PWD_KEY);
                Log.d("TCPdb","Fine estrazione ind metadati");
                Log.d("TCPdb","inizio estrazione");          
                DEVICE=c.getString(IDCol);Log.d("TCP","ghghghg");
                IP=c.getString(IPCol);Log.d("TCP","bohbohboh");
                USER=c.getString(USERCol);                                                //*
                PWD=c.getString(PWDCol);                                                    //*
                Log.d("TCPdb","fine estrazione");
               
                db.close();
                Log.d("TCPdb","Close db");
                }
                catch (Exception e) {
                    Log.e("db", "Exception", e);
                        }    }    

L'idea è quella di avere un msg tcp in ingresso, parsarlo e confrontare la prima parola con la parola contenuta nella colonna nome(DVR_ID_KEY) del dispositivo; una volta trovata, il db mi restituisce ip user e pwd correlate che poi io consumo nell'activity principale!
il problema si pone qui:
Codice (Java): [Seleziona]
DataBase db=new DataBase(getApplicationContext  ())mex:
The method getApplicationContext() is undefined for the type ReadPacket
La domanda quindi è se è possibile accedere al db da un semplice thread?Spero di si, e nel caso come si fa :-P
« Ultima modifica: 12 Ottobre 2010, 10:19:26 CEST da MrFelix »

Offline MrFelix

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Zenithink
  • Sistema operativo:
    Linus Torvalds, Richard Stallman grazie :D
Re:query in thread
« Risposta #1 il: 11 Ottobre 2010, 23:26:35 CEST »
0
ok, bene o male ho risolto: mi invio il primo tokens del mex dal thread all'activity principale dove lo do in pasto al db che mi restituisce poi le variabili....peccato volevo concentrare tutto in un unico thread.
Ribadisco, se qualcuno sa dirmi qualche cosa!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:query in thread
« Risposta #2 il: 12 Ottobre 2010, 01:13:45 CEST »
0
Puoi passare tranquillamente il Context alle altre classi, come faresti con una qualsiasi variabile. Non vedo quindi grossi problemi. :)

Se hai qualche dubbio posta il codice completo che vediamo come sistemarlo.
E per favore... usa una qualsiasi convenzione del codice java!  :D

Offline MrFelix

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Zenithink
  • Sistema operativo:
    Linus Torvalds, Richard Stallman grazie :D
Re:query in thread
« Risposta #3 il: 12 Ottobre 2010, 09:58:35 CEST »
0
E per favore... usa una qualsiasi convenzione del codice java!  :D
Spiacente, ma le convenzioni non sono il mio forte; soprattutto per linguaggi "masticati" da meno di un mese :D ;
In ogni caso non fare troppo peso alle c****e scritte...per il momento è codice da laboratorio :D;

Comunque, tu dici di passare i Context alle classi, se sapresti indicarmi qualche esempio o qualche dispensa ti sarei grato!!
Confesso di avere un bel pò di confusione in testa :D

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:query in thread
« Risposta #4 il: 12 Ottobre 2010, 11:17:21 CEST »
0
Non c'è bisogno di chissà che tutorial. Basta solo che nel costruttore delle tue classi metti un parametro di tipo Context e quando le instanzi glielo passi :)

Offline MrFelix

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Zenithink
  • Sistema operativo:
    Linus Torvalds, Richard Stallman grazie :D
Re:query in thread
« Risposta #5 il: 12 Ottobre 2010, 11:29:38 CEST »
0
Giusto...come una variabile appunto!!!! :D Non so perchè non avevo capito :D :D