-1

Getting some problems retriving rows of a table using Cursor. I have 3 tables: contacts,match and player (this last comes out from nxn relation). What i want is to retrieve all my match (current user login) giving as input my id. Here are my tables on class DatabaseHelper extends SQLiteOpenHelper:

// Tabella contacts
 static final String TABLE_NAME="contacts";
 static final String COLUMN_ID="id";
 static final String COLUMN_NAME="name";
 static final String COLUMN_EMAIL="email";
 static final String COLUMN_USERNAME="username";
 static final String COLUMN_PASSWORD="password";


//Tabella match
    static final String TABLE_MATCH="match";
    static final String COLUMN_ID_MATCH="id_match";
    static final String COLUMN_NAME_MATCH="name_match";
    static final String COLUMN_CONTATTO_MATCH="id_contatto";
    static final String COLUMN_MAX_GIOCATORI="max_giocatori";
    static final String COLUMN_CITTA="citta";
    static final String COLUMN_INDIRIZZO="indirizzo";
    static final String COLUMN_DATA="data";
    static final String COLUMN_ORA="ora";
    static final String COLUMN_LATITUDE="latitude";
    static final String COLUMN_LONGITUDE="longitude";

    // Tabella Player
    static final String TABLE_PLAYER="player";
    static final String COLUMN_ID_PLAYER="id_player";
    static final String COLUMN_ID_CONTACT_PLAYER="id_contact_player";
    static final String COLUMN_ID_MATCH_PLAYER="id_match_player";

...

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLE_CREATE);
        db.execSQL(TABLE_CREATE_MATCH);
        db.execSQL(TABLE_CREATE_PLAYER);

        this.db=db;

    }

...

 public String getContact() {
        return contact3;
    }

// Here is my function...

public Cursor getMyMatchList3(SQLiteDatabase db){

//        db=this.getReadableDatabase();
        databaseHolder=new DatabaseHolder();
        String contatto=databaseHolder.getContact();
        String query="select id_contact_player,id_match_player from "+TABLE_PLAYER;
        String query1="select * from "+TABLE_MATCH;
        Cursor cursor=db.rawQuery(query,null);
        Cursor cursor1=db.rawQuery(query1, null);
        String id_contatto_player;
        String id_partita;
        String nome,citta,indirizzo,data,ora;

        if(cursor.moveToFirst()){
            do{
                id_contatto_player=cursor.getString(0);
                if (id_contatto_player.equals(contatto)){
                    id_partita=cursor.getString(1);
                    Log.e("ID_MATCH_PLAYER",id_partita);
                    if (cursor1.moveToFirst()){
                        do{
                            if (id_partita.equals(cursor1.getString(0))){
                                id_partita=cursor1.getString(0);
                                nome=cursor1.getString(1);
                                citta=cursor1.getString(4);
                                indirizzo=cursor1.getString(5);
                                data=cursor1.getString(6);
                                ora=cursor1.getString(7);
                                Log.e("ID_PARTITA_CURSOR_1",id_partita);
                                Log.e("nome",nome);
                                Log.e("citta",citta);
                                Log.e("indirizzo",indirizzo);
                                Log.e("data",data);
                                Log.e("ora",ora);
                                return cursor1;
                            }    
                        }
                        while (cursor1.moveToNext());
                    }
                }
            }
            while (cursor.moveToNext());
        }
        return cursor1;
    }

But in this way cursor1, does not get me back the right rows but same time the Log output are all right. How can i do??

cause if i want back the entire table Match it's easy..

public Cursor getMatch(SQLiteDatabase db){
    String query="select * from "+TABLE_MATCH;
    Cursor cursor=db.rawQuery(query,null);
    return cursor;
}

than on another class i call it such way...

Cursor cursor=databaseHelper.getMatch(db);


String id_partita,nome_partita,citta,indirizzo,data,ora;
            while (cursor.moveToNext()){
                id_partita=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID_MATCH));
                nome_partita=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME_MATCH));
                citta=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_CITTA));
                indirizzo=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_INDIRIZZO));
                data=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_DATA));
                ora=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_ORA));
                  match=new Match(id_partita,nome_partita,citta,indirizzo,data,ora);
                publishProgress(match);
            }
Koalito
  • 31
  • 1
  • 4

1 Answers1

0

I did not tested it myself but I think the problem is loop:

do {...}
while (cursor1.moveToNext());

Your logs are inside the loop, but after the logs are printed out, you do:

(cursor1.moveToNext())

So you move your cursor again.

And after you move the cursor1 to the next position you return this cursor. I think you only need to remove this do-while loop.

Eldelshell
  • 6,683
  • 7
  • 44
  • 63
Godoy.R
  • 1
  • 1
  • I removed the do{..} while(cursor1.moveToNext()) but still the same...i don't get the right rows – Koalito May 18 '16 at 13:28