Articles of android cursorloader

CursorLoader,获取本地数据库的URI

我是一个新手Android程序员,我最近跟着一个教程,该教程展示了如何创建一个本地SQLite数据库,然后使用SQLiteDatabase.rawQuery来返回一个Cursor来访问数据库。 我想修改我的应用程序以使用CursorLoader,这显然是访问数据库的更好方法。 我的问题是CursorLoader构造函数需要给出一个URI。 我只输入“file:/// [db to path]”? 似乎有点凌乱。

使用CursorLoader查询SQLite DB并填充AutoCompleteTextView

我有一个我想查询的SQLite数据库。 我想通过ICS定位Android 2.2。 我遇到了关于如何执行此操作的文章,但它使用了弃用的代码(不是异步查询,而是在UI线程上)。 我已经读过,我可以使用CursorLoader和LoaderManager来执行此任务,这是首选的最佳实践方式(不会让UI线程陷入困境)。 问题是find一个简洁的例子向我解释如何做到这一点。 1)加载数据库,2)查询它,3)使用结果填充AutoCompletetextBox列表视图。 这样的例子存在吗?

startManagingCursor的目的是什么?

好的,文档声明它允许Activity管理游标的生命周期。 但是我没有真正看到它的重点,因为当活动被销毁时,对新创建的游标的任何引用也应该被删除,然后光标本身在下一个垃圾收集周期中就会死亡。 为什么要这么麻烦?

CursorLoader和AsyncTaskLoader之间的区别

我为什么要使用AsyncTaskLoader ,什么时候应该更喜欢CursorLoader ,反之亦然? 在官方页面中 ,显示了App-listing示例,它使用AsyncTaskLoader而不是CursorLoader。 这两者有哪些优缺点? 我在某处读到了CursorLoader没有关注内容更改(在sqlite中)。 谢谢!

为什么我不应该使用消息总线而不是加载器和服务?

在典型的Android项目中,我们需要以干净的方式将数据从某个地方(REST,SQL,缓存等)提取到UI中,我们通常使用Loader,Service或(可能是yuk)AsyncTask,但我发现所有这些方法由于以下几个原因不满意: 它们很难看,尤其是具有令人震惊的API结构的Loaders 它很容易被包裹在线程中,并踩在UI线程上 我们的表示层代码受到Android代码和样板的污染。 我们经常将Android对象(例如Cursors)传递到UI层,这使得一个干净的架构几乎无法实现。 这迫使我们将业务领域特定代码(理想情况下是普通Java对象)与Android平台代码混合在一起 – 对于未来开发的可读性,维护,测试或灵活性而言并不是很好。 在实践中,我们经常会遇到庞大,混乱的Activity / Fragment类。 我被这些文章中概述的想法所吸引: http : //fernandocejas.com/2014/09/03/architecting-android-the-clean-way/ http://antonioleiva.com/mvp-android/ http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html 成功开始使用MVP将活动/碎片/视图分解为更小/更清洁的部分,我现在认为上述问题的解决方案可能是依赖于消息总线(Otto,EventBus等)而不是服务或加载器或任何与域数据交互的内容。 所以在实践中,这意味着不是使用(例如)CursorLoader从数据库加载Cursor,而是使用消息总线发送消息来请求数据,数据被加载到后台线程以响应该消息,然后通过UI线程上的消息到达时处理响应数据。 对我来说至关重要的是,我更倾向于将数据结构从业务领域推出,而不是Android域,所以我更喜欢一个业务对象数组,一个Cursor。 这是工程设计,总是需要权衡,虽然这似乎提供了更清晰的关注点分离,但是装载机/服务模板的减少,缺点是什么? 理解代码可能更难(特别是对于新开发人员) 有必要确保在正确的线程上发送和接收消息(Otto似乎在这里可能有限制) 有必要避免将所有事情都作为一种信息实施的诱惑,这最终会适得其反 传递业务对象集合可能不如使用像Cursors这样的对象。 虽然在许多情况下它在实践中是一个问题吗? 我不知道Otto / EventBus是否只是为了传递非常小的消息,或者是否适合传递更大的对象(例如业务对象数组)。 我的问题是,有没有基本的原因不采取这种基于消息的方法与Android应用程序?

如何(正确)从startManagingCursor转换到CursorLoader?

我将我的android SDK更新到最新版本,现在它说不deprecated startManagingCursor() 。 我需要帮助来更新我的代码以使用新的CursorLoader 。 private void fillData() { Cursor notesCursor = mDbHelper.fetchAllNotes(); startManagingCursor(notesCursor); NoteAdapter notes = new NoteAdapter(this, R.layout.notes_row, notesCursor); setListAdapter(notes); } 所以, startManagingCursor()是旧的,如果它被翻译,新代码会是什么样子?

限制CursorLoader中的查询

我试图通过CursorLoader从sqlite db查询数据。 当我浏览android开发者网站的文档时,我找不到限制查询。 CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 如何在CursorLoader中实现限制? 提前致谢

ExpandableListView的SimpleCursorTreeAdapter和CursorLoader

我试图通过使用带有SimpleCursorTreeAdapter的CursorLoader来异步查询提供程序 这是我的Fragment类,它实现了CursorLoader public class GroupsListFragment extends ExpandableListFragment implements LoaderManager.LoaderCallbacks { private final String DEBUG_TAG = getClass().getSimpleName().toString(); private static final String[] CONTACTS_PROJECTION = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; private static final String[] GROUPS_SUMMARY_PROJECTION = new String[] { ContactsContract.Groups.TITLE, ContactsContract.Groups._ID, ContactsContract.Groups.SUMMARY_COUNT, ContactsContract.Groups.ACCOUNT_NAME, ContactsContract.Groups.ACCOUNT_TYPE, ContactsContract.Groups.DATA_SET }; GroupsAdapter mAdapter; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); populateContactList(); getLoaderManager().initLoader(-1, […]

即使应用程序处于非活动状态,CursorLoader如何自动更新视图?

我一直在研究一个小的待办事项列表应用程序。 我使用CursorLoader从内容提供者更新ToDolistview。 我有一个函数onNewItemAdded() ,当用户在文本视图中输入一个新项并单击Enter时调用该函数。 参考下文: public void onNewItemAdded(String newItem) { ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(ToDoContentProvider.KEY_TASK, newItem); cr.insert(ToDoContentProvider.CONTENT_URI, values); // getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing } @Override protected void onResume() { super.onResume(); //getLoaderManager().restartLoader(0, null, this); // commented for the sake of testing } public Loader onCreateLoader(int […]

Android浏览历史记录只留下一些网站

使用下面的function,我试图获取用户在其Android手机上从Chrome浏览器访问的最新url。 此function适用于大多数站点,但不适用于“www.reddit.com”。 如果我访问“www.google.com”,“www.hulu.com”或“www.kayak.com”,则下面的urlvariables会更新,但如果我转到“www.reddit.com”,则不会更新 。 如果我去“m.reddit.com”它会更新。 与facebook相同的问题,检测m.facebook.com但不是www.facebook.com 。 我不明白Android记录一个而不是另一个的“www.reddit.com”和“m.reddit.com”之间有什么区别。 我需要在代码中进行哪些更改才能检测到所有URL访问? public String returnLastChromeURL(int browserCode) { String[] proj = new String[] { Browser.BookmarkColumns.DATE, Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL }; String dateTime; Uri uriCustom = Uri .parse(“content://com.android.chrome.browser/bookmarks”); String sel = Browser.BookmarkColumns.BOOKMARK + ” = 0″; // 0 = history, // 1 = bookmark try { Cursor mCur = mContext.getContentResolver().query(uriCustom, proj, sel, […]