2010-08-14 6 views
1

Je dois afficher les résultats d'une jointure SQL dans ListView/ListActivity.Affichage des résultats d'une jointure SQL dans un ListActivity

J'ai créé un curseur:

Cursor cursor = db.rawQuery(LIST_JOIN_SQL, null); 

et si j'itérer le curseur, les résultats sont exactement ce que je pense. Cependant, lorsque j'essaie d'utiliser un SimpleCursorAdapter pour afficher ces résultats dans un ListView, j'obtiens une exception d'exécution car il n'y a pas de colonne appelée 'id'.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
R.layout.item, cursor, FROM, TO); 

Où FROM et TO sont définis comme:

private static String[] FROM = { "name", }; 
private static int[] TO = { R.id.name, }; 

Maintenant, je me dis que je suis en utilisant probablement la mauvaise approche ici, car il semble SimpleCursorAdapters ne sont pas destinés à l'affichage des résultats des jointures.

Quelle approche recommanderiez-vous ici? Je suis limité à l'utilisation des API Android 1.6.

Répondre

2

Essayez de choisir une de vos colonnes comme _ID alias

select col1 as _id from table 
+0

solution parfaite - merci beaucoup. –

1

Pour utiliser CursorAdapter (ou l'une de ses sous-classes), vous devez avoir la colonne "_id"; it's explicitly stated in the documentation. C'est parce que CursorAdapter utilise cette colonne fortement.

Ce que je recommande est tout ce que vous pensez (en fonction de votre projet) pour être le plus facile de ces deux chemins:

  1. Créer un champ _id dans l'une des tables de sorte que lorsque vous vous inscrivez, vous finissez avec un champ _id.

  2. Implémentez votre propre ListAdapter (à partir de BaseAdapter) qui est essentiellement un CursorAdapter mais ne nécessite pas de champ _id.

je soupçonne # 1 serait plus facile de le faire si vous contrôlez la base de données, mais que vous auriez à faire # 2 si vous ne pouvez pas modifier le schéma des bases de données.

Questions connexes