La base de données Android ContentProvider interroge plusieurs tables

Je suis en train d'écrire un lecteur de flux RSS pour Android. J'ai été confronté à une certaine difficulté de le problème, je ne peux pas résoudre depuis les bases de données ne sont pas mon domaine.. Alors j'ai pensé que peut-être l'un de vous pourrait m'aider! J'ai actuellement 3 tables (les Catégories, des liens et des flux). Mon objectif est trop lien à un flux de plusieurs catégories. À cet effet, je suis en utilisant une table de Liaison. Mes bases de données est un Android ContentProvider (sqlite) et se présente comme suit:

| Categories |          |  Links  |          | Feeds |
|------------|          |---------|          |-------|
|  _ID       |          | Category|          | _ID   | 
|  Title     |          | Feed    |          | Title |
                                             | URL   |

Je suis actuellement a écrit le code suivant dans mon FeedListActivity pour récupérer une liste de liens et de leur flux.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//gets the intent URI to retrieve the Feeds.
Intent intent = getIntent();
if (intent.getData() == null) {
intent.setData(Feeds.CONTENT_URI);
}
// stores the Category id so it knows from what category it came from
mCatId = intent.getIntExtra("catId", -1);   
getListView().setOnCreateContextMenuListener(this);
// gets all Links that have the category placed
Cursor links = managedQuery(
Links.CONTENT_URI, 
NewsReadUtils.LINK_PROJECTION_STRING, 
Links.CATEGORY+ " = "+ mCatId, null, null);
String query = "";
Cursor cursor = null;
if(links.getCount()>0){
// if there are links available try to get them and build a query.
links.moveToFirst();
do{
if (links.isFirst()) {
query = Feeds._ID+ " = "+links.getString(links.getColumnIndex(Links.FEED));                 
}else{
query += " OR " +Feeds._ID+ " = "+links.getString(links.getColumnIndex(Links.FEED));
}               
}while(links.moveToNext()); 
cursor = managedQuery(getIntent().getData(), PROJECTION ,query, null,
Feeds.DEFAULT_SORT_ORDER);
}
Cursor cursor = managedQuery(getIntent().getData(), PROJECTION ,Feeds._ID+ " = "+ mCatId, null,
Feeds.DEFAULT_SORT_ORDER);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,
new String[] { Feeds.TITLE }, new int[] { android.R.id.text1 });
setListAdapter(adapter);       
}

Maintenant, ma question:

Je me demandais comment je pourrais optimiser cette disposition de base de données, un code ou une requête donc, je voudrais obtenir mon entrées dans une manière plus efficace. Parce que je crois que ce lien la table ou la requête pour récupérer des liens n'est pas nécessaire! Ou suis-je le faire de la bonne façon?

Merci,

Antek

source d'informationauteur Antek Drzewiecki | 2010-05-07