Autore Topic: sqlite imperfezione con il back....  (Letto 1010 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
sqlite imperfezione con il back....
« il: 12 Settembre 2013, 17:20:22 CEST »
0
ciao a tutti!!!!

ho creato 2 butto dove posso andare avanti ed indietro per le rows della lista....ma mi sono accorto di una imperfezione...cioè dopo aver clikkato per visualizzare la row selezionata...se clikko il tasto avanti funziona benissimo....cioè va subito alla row successiva, mentre con il tasto per andare indietro se ho già clikkato sul tasto avanti funziona benissimo mentre se clikko per prima il tasto per andare indietro...non succede nulla!!!...praticamente per andare alla row precedente devo per forza clikkare per prima il tasto avanti....altrimenti non funziona!!!!!

per andare avanti ed indietro per le rows...al database scrivo questo:

Codice (Java): [Seleziona]
public ArrayList<Contatti> getAllNextBack() {
                        SQLiteDatabase database = this.getReadableDatabase();
                        ArrayList<Contatti> contactList = new ArrayList<Contatti>();
                    // Select All Query
                    String selectQuery = "SELECT * FROM contatti" ;
                 
                    //SQLiteDatabase db = this.getWritableDatabase();
                    Cursor cursor = database.rawQuery(selectQuery, null);
                 
                    // looping through all rows and adding to list
                    if (cursor.moveToFirst()) {
                        do {
                                Contatti contact = new Contatti();
                            //contact.setInt(Integer.parseInt(cursor.getString(0)));
                            contact.setNome(cursor.getString(1));
                            contact.setCognome(cursor.getString(2));
                            // Adding contact to list
                            contactList.add(contact);
                        } while (cursor.moveToNext());
                    }
                 
                    // return contact list
                    return contactList;
                }

mentre nel MainActivity scrivo questo:
Codice (Java): [Seleziona]
private ArrayList<Contatti> allPerson;
    private int currentIndex = 0;
...
public void nextList(View view) {
                allPerson =  controller.getAllNextBack();
                if (allPerson != null) {
                if (currentIndex < (allPerson.size() - 1)) {
                        currentIndex++;
                Contatti currentPerson = allPerson.get(currentIndex);
                nomeText =(currentPerson.getNome());
                cognomeText = (currentPerson.getCognome());
                       
                        Toast.makeText(getApplicationContext(), nomeText, Toast.LENGTH_LONG).show();
                       
                       
                }
        }
        // IL PROBLEMA è QUA'!!!!!!!!!!
        public void backList(View view) {
               
                allPerson =  controller.getAllNextBack();
                if (allPerson != null) {                       
                if (currentIndex > 0 ) {
                        currentIndex--;
                Contatti currentPerson = allPerson.get(currentIndex);
                nomeText =(currentPerson.getNome());
                cognomeText = (currentPerson.getCognome());
       
                       
                        Toast.makeText(getApplicationContext(), nomeText, Toast.LENGTH_LONG).show();
                       
                       
                }
        }

DOVE SBAGLIO AL BACK!!???

Spero di essere stato chiaro!!!!!

HELP!!!!
tutti possiamo programmare...basta volerlo!!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:sqlite imperfezione con il back....
« Risposta #1 il: 12 Settembre 2013, 18:02:07 CEST »
0
Forse perchè currentIndex è zero?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #2 il: 12 Settembre 2013, 18:06:17 CEST »
0
...e quale valore devo dare??

ho provato a scrivere:

private int currentIndex;

ma il problema è sempre lo stesso!!!


tutti possiamo programmare...basta volerlo!!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:sqlite imperfezione con il back....
« Risposta #3 il: 12 Settembre 2013, 18:36:46 CEST »
0
...e quale valore devo dare??

Non so che valore deve avere currentIndex nella tua applicazione.

Da un punto di vista strettamente "java", io vedo che non appena crei tutto, il valore iniziale di currentIndex è ZERO e se è ZERO impedisci di eseguire il codice del back.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #4 il: 12 Settembre 2013, 18:50:29 CEST »
0
...si ma ora ho eliminato il valore 0!!!!

ho scritto:

private int currentIndex;

ma lo stesso non esegue il cod. back....ma la cosa strana è che funziona solo se clicco prima next...come mai???

io scrivo:

if (currentIndex > 0 ) {

cioè metto una condizione!!!!

non capisco l'errore delle mia logica!!!!

sto impazzendo!!!!
tutti possiamo programmare...basta volerlo!!!

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:sqlite imperfezione con il back....
« Risposta #5 il: 13 Settembre 2013, 08:23:24 CEST »
0
Devi dare a currentIndex il valore dell'indice della riga cliccata, altrimenti se currentIndex rimane a zero o non è valorizzato è come se tu fossi alla prima riga e quindi non va indietro.

Prova amettere un log prima del'IF e vedi in quel momento che valore ha currentIndex.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #6 il: 13 Settembre 2013, 09:36:51 CEST »
0
...ciao crbin...il valore che i da è 0...

come faccio a dare un valore all'indice della riga clikkata????

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

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:sqlite imperfezione con il back....
« Risposta #7 il: 13 Settembre 2013, 09:56:34 CEST »
0
...ciao crbin...il valore che i da è 0...

come faccio a dare un valore all'indice della riga clikkata????

aiuto!!!

Nel primo post scrivi
Citazione
dopo aver clikkato per visualizzare la row selezionata
. Quindi al momento che viene selezionato una riga tu avrai un listener (un onClick) dove hai il codice per mostrare quella riga, in quel punto devi anche valorizzare correttamente currentIndex.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #8 il: 13 Settembre 2013, 10:07:35 CEST »
0
al next per valorizzare il "currentIndex" scrivo:

if (currentIndex < (allPerson.size() - 1)) {

ora per il back cosa devo scrivere???

tutti possiamo programmare...basta volerlo!!!

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:sqlite imperfezione con il back....
« Risposta #9 il: 13 Settembre 2013, 10:13:52 CEST »
0
al next per valorizzare il "currentIndex" scrivo:

if (currentIndex < (allPerson.size() - 1)) {

ora per il back cosa devo scrivere???

Non ho capito però se l'utente può scegliere da quale riga partire o parti sempre a visualizzare dalla prima riga.

Se l'utente può scegliere e quindi puoi partire per esempio dalla riga 4 ci deve essere un punto in cui dici all'applicazione che la prima riga da visualizzare è la 4 (fuori dal codice che hai postato). Ed è li che devi valorizzare il tuo currentIndex. Se invece parti sempre dalla prima riga il tuo codice è corretto, finché sei sulla rima riga non puoi tornare indietro.

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #10 il: 13 Settembre 2013, 10:23:04 CEST »
0
...infatti hai ragione!!!

è sbagliata anche il cod. del next....

se parto dalla prima riga allora funziona...ma se dovessi partire dalla seconda dovrei clikkare 2 volte per andare avanti!!!!

quindi è tutto errato il cod.!!!!!

non riesco il giusto valore!!!!

c'è un esempio o una guida????
tutti possiamo programmare...basta volerlo!!!

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:sqlite imperfezione con il back....
« Risposta #11 il: 13 Settembre 2013, 11:30:37 CEST »
0
però non ho capito come fai ad arrivare a questo punto, come avviene la scelta della riga? Immagino ci sia un click da qualche parte, prova a postare il codice che intercetta quell'evento

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #12 il: 13 Settembre 2013, 13:06:33 CEST »
0
ciao!!!

ho cambiato totalmente cod:

nel db ho scritto:

Codice (Java): [Seleziona]
public Cursor getDefault() throws SQLException {
                        SQLiteDatabase database = this.getReadableDatabase();
                    String getRT = "SELECT * from data";
                    Cursor mCur = database.rawQuery(getRT, null);
                    return mCur;
                }

mentre in main per andare avanti ed indietro per le row ho scritto:

Codice (Java): [Seleziona]
public void nextList2(View view) {
                cursor = controller.getDefault();
                if(cursor != null) {
                        if (cursor.moveToNext()) {
                        cursor.moveToNext();           
                nomeText = cursor.getString(1);
                cognomeText = cursor.getString(2);      
                Toast.makeText(getApplicationContext(), nomeText, Toast.LENGTH_LONG).show();
                        }    
                }
        }
        public void backList2(View view) {
                cursor = controller.getDefault();
                if(cursor != null) {
                        if (cursor.moveToPrevious()) {
                cursor.moveToPrevious();                       
                nomeText = cursor.getString(1);
                cognomeText = cursor.getString(2);      
                Toast.makeText(getApplicationContext(), nomeText, Toast.LENGTH_LONG).show();
                        }    
                }
        }

in questo modo...non mi da nessun problema nell'andare avanti...mentre andando indietro non fa nulla!!!!
come mai????

il
tutti possiamo programmare...basta volerlo!!!

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:sqlite imperfezione con il back....
« Risposta #13 il: 13 Settembre 2013, 17:26:26 CEST »
0
Ti ripeto ancora la domanda...  :D Dov'è he l'utente sceglie quale riga visualizzare? Anche nel tuo nuovo codice il cursore parte sempre dalla prima riga, devi intercettare l'evento "scelta riga da visualizzare" e puntare su quella riga

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:sqlite imperfezione con il back....
« Risposta #14 il: 15 Settembre 2013, 09:19:34 CEST »
0
ciao a tutti!!!!

sono riuscito a dare un valore al currentIndex....

nel db ho scritto:
Codice (Java): [Seleziona]
public HashMap<String, String> getInfoContatti(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));
                        wordList.put("cognome", cursor.getString(2));

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

mentre per andare avanti ed indietro al main principale scrivo:
Codice (Java): [Seleziona]
if (contattiList != null) {    
                       
                        currentIndex =Integer.parseInt(contattiId);
                        currentIndex--;
                        contattiId =""+currentIndex;                   
                        contattiList = controller.getInfoContatti(contattiId);
                       
                        if(contattiList.size()!=0) {
                                nomeText = (contattiList.get("nome"));
                                cognomeText = (contattiList.get("cognome"));
                                Toast.makeText(getApplicationContext(), nomeText, Toast.LENGTH_LONG).show();
}else {
                        Toast.makeText(getApplicationContext(), "Ultimo Row", Toast.LENGTH_LONG).show();
}

in questo modo riesco sia ad andare sia a destra che a sinistra ma quando arrivo all'ultimo row o al primo row non esce il messaggio e non si ferma!!!

help!!!!
tutti possiamo programmare...basta volerlo!!!