Autore Topic: controllo del primo ed ultimo row.....  (Letto 608 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
controllo del primo ed ultimo row.....
« il: 15 Agosto 2013, 10:28:25 CEST »
0
ciao a tutti!!!

per andare avanti ed indietro per i row del database scrivo questo:

Codice (Java): [Seleziona]
public void next(View view) {
               
                nomeText = (TextView) findViewById(R.id.nomeText);
                               
                int contattiIdnumero =Integer.parseInt(contattiId);
                contattiIdnumero++;
                contattiId =""+contattiIdnumero;
                HashMap<String, String> contattiList = controller.getNextContatti(contattiId);
               
                if(contattiList.size()!=0) {
                        nomeText.setText(contattiList.get("nome"));

                }
        }
       
        public void back(View view) {
               
                nomeText = (TextView) findViewById(R.id.nomeText);

                               
                int contattiIdnumero =Integer.parseInt(contattiId);
                contattiIdnumero--;
                contattiId =""+contattiIdnumero;
                HashMap<String, String> contattiList = controller.getBackContatti(contattiId);
               
                if(contattiList.size()!=0) {
                        nomeText.setText(contattiList.get("nome"));
       
                }
        }

con questo cod. visualizzo i rows!!! ma nel momento in cui vado all'ultimo row non si ferma!!! mi visualizza sempre lo stesso ultimo row..poi se dovessi tornare indietro mi visualizza tanti ultimi rows quanti ne ho visualizzati!!!..la stessa cosa vale anche se vado al primo row....

vorrei inserire un controllo...cioè se arriva all'ultimo row...si deve fermare o disattivo il button....

come faccio???

aiuto!!!
tutti possiamo programmare...basta volerlo!!!

Offline Gianluca

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S-II (i9100)
  • Sistema operativo:
    Windows 8
Re:controllo del primo ed ultimo row.....
« Risposta #1 il: 16 Agosto 2013, 12:05:24 CEST »
0
Ti prego, metti row al femminile (riga), suona così strano sennò :P

Comunque è davvero difficile darti una mano. Non vedo nessun dato su manipolazione del cursore. Questi metodi a sé stanti non dicono molto: cos'è getBackContatti()? controller è un cursore o un oggetto tuo?

Comunque, penso che i seguenti metodi possano essere ciò che stai cercando:
Codice (Java): [Seleziona]
isFirst()
c.isLast()
isBeforeFirst()
c.isAfterLast()

Leggi qui: Cursor | Android Developers
e qui: android - Trying to get to last cursor position with &quot;moveToLast&quot; sqlite DB is causing force close - Stack Overflow

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:controllo del primo ed ultimo row.....
« Risposta #2 il: 16 Agosto 2013, 15:36:04 CEST »
0
...ciao...hai ragione!!!!

per i cursor scrivo questo:

Codice (Java): [Seleziona]
public HashMap<String, String> getNextContatti(String id) {
                HashMap<String, String> wordList = new HashMap<String, String>();
                SQLiteDatabase database = this.getReadableDatabase();
                String selectQuery = "SELECT * FROM contatti where contattiId='"+id+"'";
                Cursor cursor = database.rawQuery(selectQuery, null);
                if (cursor.moveToFirst()) {
                do {                                   
                        wordList.put("nome", cursor.getString(1));
                } while (cursor.moveToNext());
            }                              
                return wordList;       
        }
       
        public HashMap<String, String> getBackContatti(String id) {
                HashMap<String, String> wordList = new HashMap<String, String>();
                SQLiteDatabase database = this.getReadableDatabase();
                String selectQuery = "SELECT * FROM contatti where contattiId='"+id+"'";
                Cursor cursor = database.rawQuery(selectQuery, null);
                if (cursor.moveToFirst()) {
                do {                                   
                        wordList.put("nome", cursor.getString(1));
                } while (cursor.moveToNext());
            }                              
                return wordList;       
        }
}
tutti possiamo programmare...basta volerlo!!!

Offline Gianluca

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S-II (i9100)
  • Sistema operativo:
    Windows 8
Re:controllo del primo ed ultimo row.....
« Risposta #3 il: 16 Agosto 2013, 15:51:50 CEST »
0
Forse ho letto troppo di fretta, ma a me sembrano lo stesso metodo. Non riesco a capire cosa tu voglia fare: a cosa, concettualmente, i due metodi sono preposti?

Comunque il codice mi sembra molto sporco. Ti do alcuni consigli:
        > Che senso ha utilizzare una Mappa quando la chiave che usi è sempre la stessa ("nome")? Piuttosto, usa una lista: List<String>.
        > Gestisci le chiamate al DB attraverso una classe apposita, che chiami attraverso singleton. In questo modo non apri istanze multiple del DB, ottimizzi le risorse, e rendi il codice più nitido. Guarda qui: Android SQLite database and content provider - tutorial
        > Non aprire/chiudere il DB ogni volta in singoli metodi. Piuttosto passati il cursore dentro il metodo, e manipola i dati da lì dentro, secondo una logica a matriosca. Ricorda sempre: meno ripeti codice ridondante, meglio è!

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:controllo del primo ed ultimo row.....
« Risposta #4 il: 16 Agosto 2013, 16:15:57 CEST »
0
ciao gianluca....

grazie del suggerimento!!!

ti faccio sapere appena finisco!!!

Post unito: 18 Agosto 2013, 12:34:42 CEST
ciao gianluca...

ho rifatto il db.....

per visualizzare il nome scrivo questo:
Codice (Java): [Seleziona]
cursor = adapter.queryAll(rowId);
        if (cursor.moveToFirst()) {            
            do {
                nomeShow.setText(cursor.getString(1));
            } while (cursor.moveToNext());
        }

dove queryAll ho scritto:

Codice (Java): [Seleziona]
public Cursor queryAll(int nameId) {
        String[] cols = { open_db.KEY_ID, open_db.NOME };
        opnToWrite();
        Cursor cursor = database.query(open_db.TABLE_NAME, cols, open_db.KEY_ID + "=" + nameId, null, null,);
        return cursor;
    }

ora vorrei visualizzare altri testi premendo dei button "Avanti" "Indietro"....

mi potresti aiutare???

per andare indietro ho scritto:

Codice (Java): [Seleziona]
btnIndietro.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                cursor = adapter.queryAll(rowId);
                if (cursor.moveToFirst()) {            
                    do {
                        nomeShow.setText(cursor.getString(1));

                    } while (cursor.moveToNext());
                }
               
            }
        });

ma quando clikko sul bottone non succede niente!!!!

aiuto!!!

Post unito: 18 Agosto 2013, 12:56:58 CEST
per andare avanti ed indietro ho scritto:
Codice (Java): [Seleziona]
public boolean moveToNext() {
                int pos = mCurrentPosition + 1;
                if (pos >= cursor.getCount()) {
                        return false;
                } else {
                        mCurrentPosition = pos;
                        return true;
                }
        }
        public boolean moveToPrevious() {
                int pos = mCurrentPosition - 1;
                if( pos < 0 ) {
                        return false;
                } else {
                        mCurrentPosition = pos;
                        return true;
                }
        }

ma non fa niente!!!!!
« Ultima modifica: 18 Agosto 2013, 12:56:58 CEST da paul78, Reason: Merged DoublePost »
tutti possiamo programmare...basta volerlo!!!

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:controllo del primo ed ultimo row.....
« Risposta #5 il: 20 Agosto 2013, 17:42:58 CEST »
0
Ciao gianluca...tramite una guida ho riscritto il cod:

questo è l'Adapter:

Codice (Java): [Seleziona]
public class SqlAdapter {
    SQLiteDatabase database_ob;
    SqlOpen openHelper_ob;
    Context context;
 
    public SqlAdapter(Context c) {
        context = c;
    }
 
    public SqlAdapter opnToRead() {
        openHelper_ob = new SqlOpen(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getReadableDatabase();
        return this;
 
    }
 
    public SqlAdapter opnToWrite() {
        openHelper_ob = new SqlOpen(context,
                openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
        database_ob = openHelper_ob.getWritableDatabase();
        return this;
 
    }
 
    public void Close() {
        database_ob.close();
    }
 
    public long insertDetails(String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.insert(openHelper_ob.TABLE_NAME, null,
                contentValues);
        Close();
        return val;
 
    }
 
    public Cursor queryName() {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, null,
                null, null, null, null);
 
        return c;
 
    }
 
    public Cursor queryAll(int nameId) {
        String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
                openHelper_ob.LNAME };
        opnToWrite();
        Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols,
                openHelper_ob.KEY_ID + "=" + nameId, null, null, null, null);
 
        return c;
 
    }
 
    public long updateldetail(int rowId, String fname, String lname) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(openHelper_ob.FNAME, fname);
        contentValues.put(openHelper_ob.LNAME, lname);
        opnToWrite();
        long val = database_ob.update(openHelper_ob.TABLE_NAME, contentValues,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }
 
    public int deletOneRecord(int rowId) {
        // TODO Auto-generated method stub
        opnToWrite();
        int val = database_ob.delete(openHelper_ob.TABLE_NAME,
                openHelper_ob.KEY_ID + "=" + rowId, null);
        Close();
        return val;
    }
 
}

mentre per andare avanti ed indietro scrivo questo:
Codice (Java): [Seleziona]
public class Modifica extends Activity {
    SqlAdapter regadapter;
    SqlOpen openHelper;
    int rowId;
    Cursor c;
    String fNameValue, lNameValue;
    EditText fname, lname;
    Button editSubmit, btnDelete;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modifica);
        fname = (EditText) findViewById(R.id.et_editfname);
        lname = (EditText) findViewById(R.id.et_editlname);
        editSubmit = (Button) findViewById(R.id.btn_update);
        btnDelete = (Button) findViewById(R.id.btn_delete);
 
        Bundle showData = getIntent().getExtras();
        rowId = showData.getInt("keyid");

        regadapter = new SqlAdapter(this);
 
        c = regadapter.queryAll(rowId);
 
        if (c.moveToFirst()) {
            do {
                fname.setText(c.getString(1));
                lname.setText(c.getString(2));
 
            } while (c.moveToNext());
        }
 
        editSubmit.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                regadapter.updateldetail(rowId, fname.getText().toString(),
                        lname.getText().toString());
                finish();
            }
        });
        btnDelete.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                regadapter.deletOneRecord(rowId);
                finish();
            }
        });
    }
   
    public void prev(View view) {

        c = regadapter.queryName();
        if (c.moveToNext()) {
            do {
                fname.setText(c.getString(1));
                lname.setText(c.getString(2));
 
            } while (c.moveToPrevious());
        }
                       
                Toast.makeText(getApplicationContext(), "Prova", Toast.LENGTH_LONG).show();
       
               
        }
   
    public void next(View view) {

        c = regadapter.queryName();
        if (c.moveToNext()) {
            do {
                fname.setText(c.getString(1));
                lname.setText(c.getString(2));
 
            } while (c.moveToNext());
        }
                       
                Toast.makeText(getApplicationContext(), "Prova", Toast.LENGTH_LONG).show();
       
               
        }
   
}

quando clikko su avanti mi va all'ultimo row...mentre quando clikko indietro va alla prima row....

aiuto!!!!! :'(
tutti possiamo programmare...basta volerlo!!!

Offline Gianluca

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S-II (i9100)
  • Sistema operativo:
    Windows 8
Re:controllo del primo ed ultimo row.....
« Risposta #6 il: 22 Agosto 2013, 20:58:55 CEST »
0
Ciao! Scusa sono offline per un po, quindi non riesco ad essere presente continuativamente.
Comunque: i due metodi per aprire il database sono identici, quindi la differenza è inutile. L'apertura, che sia per leggere o per scrivere, è identica.
A parte questo continuo a non capire quale sia lo "scopo ultimo": cosa significa andare indietro? E avanti? Qual è il DB che stai usando?
Comunque ottimo il resto! Se proprio vuoi fare le cose fatte bene, usa un costrutto singleton per rendere l'accesso alla classe statico.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:controllo del primo ed ultimo row.....
« Risposta #7 il: 25 Agosto 2013, 13:46:30 CEST »
0
ciao gianluca...finalmente ho risolto!!!

ora stò solo ricostruendo il database!!!

grazie mille!!!
tutti possiamo programmare...basta volerlo!!!