Je suis en train d'écrire un lecteur RSS pour Android. J'ai fait face à une certaine difficulté que le problème que je ne peux pas résoudre puisque les bases de données ne sont pas mon expertise. Ainsi j'ai compris que peut-être l'un d'entre vous pourrait m'aider! J'ai actuellement 3 tables (catégories, liens et flux). Mon objectif est aussi de lier un flux à plusieurs catégories. Pour cette raison, j'utilise une table Link. Mes bases de données est un Android ContentProvider (sqlite) et ressemble à ce qui suit:Android ContentProvider requête de base de données plusieurs tables
| Categories | | Links | | Feeds |
|------------| |---------| |-------|
| _ID | | Category| | _ID |
| Title | | Feed | | Title |
| URL |
j'ai écrit actuellement le code suivant dans mon FeedListActivity pour récupérer une liste de liens et de leurs 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);
}
Ma question:
Je me demandais comment je pourrais optimiser cette mise en page de base de données, le code ou une requête afin que je recevrais mes entrées d'une manière plus efficace. Parce que je crois que cette table de liens ou la requête pour récupérer des liens n'est pas nécessaire! Ou est-ce que je le fais de la bonne façon?
Merci,
Antek