我正在为Android编写RSS阅读器.我遇到了一些难以解决的问题,因为数据库不是我的专业知识,所以我无法解决这个问题.所以我想你也许其中一个可以帮助我!我目前有3个表(类别,链接和提要).我的目标是将Feed添加到多个类别.因此我使用的是Link表.我的数据库是Android ContentProvider(sqlite),如下所示:
| Categories | | Links | | Feeds | |------------| |---------| |-------| | _ID | | Category| | _ID | | Title | | Feed | | Title | | URL |
我目前在FeedListActivity中编写了以下代码,以检索链接及其提要列表.
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); }
现在我的问题:
我想知道如何优化这个数据库布局,代码或查询,以便我以更有效的方式获取我的条目.因为我相信不需要这个链接表或查询链接的查询!或者我这样做是正确的吗?
谢谢,
ANTEK
虽然CommonsWare的答案在某种程度上是正确的,但我发现它并没有完全回答这个问题.
通常,ContentProviders是一种共享/公开应用程序数据的方式,实际上通常情况就是如此.但是,可能会出现需要使用ContentProvider连接多个表的情况.
关于Android的好处是它是开源的,所以没有什么能阻止你在Android应用程序中搜索类似的场景.这就是我在这种情况下通常做的事情.这ContactsProvider.java
是一个很好的例子.这有点复杂,但通过它可以提供一些有关如何在ContentProviders中使用连接的见解.如果您不想下载源代码,可以在GitHub上找到它:
https://github.com/android/platform_packages_providers_contactsprovider/blob/master/src/com/android/providers/contacts/ContactsProvider2.java
祝好运 :)