/ / Obtenir une ligne spécifique avec Cursor et SQLiteDatabase - Android, curseur, sqliteopenhelper

Obtenir une ligne spécifique avec Cursor et SQLiteDatabase - Android, Curseur, sqliteopenhelper

Obtention de problèmes lors du rappel des lignes d'une tableen utilisant le curseur. J'ai 3 tables: contacts, match et joueur (ce dernier provient de la relation nxn). Ce que je veux, c'est récupérer toute ma correspondance (identifiant de l'utilisateur actuel) en donnant comme entrée mon identifiant. Voici mes tables sur la classe DatabaseHelper étend 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;
}

// Voici ma fonction ...

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;
}

Mais de cette façon, cursor1 ne me renvoie pas les bonnes lignes, mais en même temps, la sortie du journal est correcte. Comment puis-je faire??

Parce que si je veux revenir à la table entière Match it "s easy ..

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

que sur une autre classe, je l'appelle de cette façon ...

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);
}

Réponses:

0 pour la réponse № 1

Je ne l'ai pas testé moi-même mais je pense que le problème est en boucle:

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

Vos journaux sont dans la boucle, mais une fois que les journaux sont imprimés, vous devez:

(cursor1.moveToNext())

Donc, vous déplacez votre curseur à nouveau.

Et après avoir déplacé le cursor1 à la position suivante, vous retournez ce curseur. Je pense que vous devez seulement enlever ceci do-while boucle.