问题标签 [android-cursorloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6022 浏览

android - 使用 CursorLoader 查询 SQLite DB 并填充 AutoCompleteTextView

我有一个我想查询的 SQLite 数据库。我想通过 ICS 定位 Android 2.2。我遇到了这篇关于如何做到这一点的文章,但它使用了不推荐使用的代码(不异步查询,而是在 UI 线程上)。从那以后,我读到我可以使用CursorLoaderwithLoaderManager来执行此任务,这是首选的最佳实践方式(以免使 UI 线程陷入困境)。

问题是找到一个简洁的例子来向我解释如何做到这一点。1) 加载数据库,2) 查询它,3) 使用结果填充 AutoCompletetextBox 列表视图。

有这样的例子吗?

0 投票
1 回答
2778 浏览

android - Populate widgets from a cursor in onLoadFinished()

I want to know how to use the CursorLoader to populate the widgets on a screen. All the examples online are only for using an adapter and this works great. What I need is a reliable way to update the views in my screen from a Cursor and on the UI thread and without sometimes crashing because of StaleDataException or the cursor being deactivated all of a sudden. Here is my current approach but I still receive some crash reports from users.

One solution would be to retrieve all the cursor fields directly inside onLoadFinished and pass them all to the handler to populate the widgets on the UI thread. But this is ugly because I may have a lot of values in the cursor. I would love to find a reliable crash-free way of dealing with all this.

0 投票
1 回答
14768 浏览

android - 如何(正确)从 startManagingCursor 过渡到 CursorLoader?

我将我的 android 更新SDK到最新版本,现在它说startManagingCursor()deprecated. 我需要帮助来更新我的代码以使用新的 CursorLoader.

那么,startManagingCursor()旧的,如果新代码被翻译,它会是什么样子?

0 投票
1 回答
12812 浏览

android - 带有由 LoaderManager 管理的自定义适配器的 AlphabetIndexer

我正在尝试AlphabetIndexer使用这样的自定义适配器来实现

带有自定义适配器的 AlphabetIndexer

我的 ContactsCursorAdapter 类扩展SimpleCursorAdapter和实现SectionIndexer ,我正在使用 aLoaderManager来管理我的适配器的光标,所以我已经覆盖了swapCursor()上面示例的第二个答案所示的方法。

但是,如果我将列表视图设置为 fastScrollEnabled = true,则会出现此错误

getListView().setFastScrollEnabled(true);

在我的类 ContactsCursorLoaderListFragment 中,它扩展ListFragment并实现了 LoaderManager.LoaderCallbacks 。

这是堆栈跟踪:

在调用该setFastScrollEnabled()方法后,它会调用自定义适配器的getSections()方法,这是它崩溃的地方。

如果我评论这个setFastScrollEnabled()电话,那么它不会出错,但我没有看到AlphabetIndexer工作。

这是否需要以不同的方式实现,因为我的自定义适配器设置在 aListFragment而不是 a中ListActivity

有没有人有关于如何使这一切工作的建议?

0 投票
3 回答
7016 浏览

android - 使用 CursorLoader 进行分组

如何GROUP BY为我的 CursorLoader 定义查询?

CursorLoader我看到的 a 的两个构造函数采用 singleContext或 a Context, Uri, projection, selection, selectionArgsand sortOrder

但是没有groupBy

(我正在使用 Android 2.3 设备的支持包)

0 投票
3 回答
21890 浏览

android - ExpandableListView 的 SimpleCursorTreeAdapter 和 CursorLoader

我正在尝试通过使用 a 来异步查询提供CursorLoader程序SimpleCursorTreeAdapter

这是我的Fragment类,它实现了CursorLoader

这是我的子类的适配器SimpleCursorTreeAdapter

问题是,当我单击父组之一时,三件事中的一件会以一种不一致的方式发生。

1)要么组打开,孩子们出现在它下面

2) 组没有打开并且setChildrenCursor()调用抛出一个NullPointerException错误,该错误在 try catch 块中被捕获

3)组不开,不报错

以下是扩展组并显示子项的场景中的一些调试输出:

当显示所有组时,它会输出:

-1 是组游标的loader_id

然后,如果我特别选择一个组(我们称之为 A 组),它会输出:

小组没有扩大,NullPointerException被抓住了。然后,如果我选择另一个组(我们称之为 B 组),它会输出:

这一次,NullPointerException没有抛出。而不是 B 组扩展,A 组被扩展。

任何人都可以解释setChildrenCursor()呼叫所表现出的行为吗?

我认为组/子 CursorLoaders 如何在onCreateLoader(). 对于该组CursorLoader,我只想要手机中的所有组。子级CursorLoader应包含组内的所有联系人。有谁知道可能是什么问题?

更新

感谢@Yam 的建议,我现在修改了getChildrenCursor()方法。我现在选择 groupCursor 位置而不是 ContactsContract.Groups._ID 的值来传递给 initLoader() 调用。我还将逻辑更改为仅在 loader 不为 null 且 loader isReset 为 false 时调用 restartLoader() 。

这绝对更有意义,并且不会表现出有时而不是其他时间扩展组的一些不稳定行为。

但是,有些联系人显示在他们不属于的组下。还有一些组中确实有联系人,但不会显示任何联系人。所以现在看来getChildrenCursor()​​问题可能已经解决了。

但是现在看起来是如何在onCreateLoader()方法中实例化 CursorLoaders 的问题。子游标的方法中 的CursorLoader返回是否被不正确地实例化?onCreateLoader()

更新

所以我已经确定了我的问题之一。在该getChildrenCursor()方法中,如果我将 groupId 传递给该initLoader()方法,那么在该onCreateLoader()方法中,当CursorLoader创建它时,它将获得查询的正确 groupid 参数。但是,在onLoadFinished()调用中setChildrenCursor()传递的是第一个参数的加载程序 ID,而不是 groupPosition。我猜我必须将加载器 ID 映射到某些数据结构中的组位置。但我不确定这是否是最好的方法。有没有人有什么建议?

0 投票
1 回答
522 浏览

android - 将所有不在 Android 播放列表中的音乐作为列表查找

我想使用 CursorLoader 获取不在给定播放列表中的所有音乐。是否可以?

我们可以使用以下代码获取列表中的所有音乐

但我需要做相反的事情,即获取所有不在给定播放列表中的音乐。我怎样才能做到这一点?

0 投票
2 回答
1516 浏览

android - 将 CursorLoader 生成的 Cursor 列中的字符串放入 EditText

我正在 Honeycomb 上编写一个应用程序,但我的内容提供商的光标遇到了问题。我希望实现一个来自官方记事本示例的简单代码实现的效果:

也就是说,我只是希望将光标当前位置的数据放入 EditText 以便用户可以编辑它。问题是我不知道如何使用 CursorLoader 执行此操作。我不能使用 managedQuery() 因为它已被弃用,无论如何我都必须调用 startManagingCursor() ,它也已被弃用。我该怎么做?提前致谢。

0 投票
1 回答
2511 浏览

android - 光标更改时未调用Android OnLoadFinished()

我创建了一个简单 Activity的实现LoaderManager.LoaderCallbacks<Cursor>接口。OnCreateLoader()很简单:

getLoaderManager().initLoader(0, null, this)当我在Activity创建时调用此方法。

我的问题是在 my 上ContentProvider,它具有以下query()方法:

queryCursor我收到来自网络服务器的响应后,数据库中会更新。但是,当我在的 update 方法中调用该getContext().getContentResolver().notifyChange(uri, null)方法时,我在 上的方法不会被调用,即使 uri 与实例化.ContentProviderOnLoadFinished()ActivityCursorLoader

这是上的更新方法ContentProvider

有人可以告诉我在调用同一个 uriOnLoadFinshed()时没有调用我的方法的原因是什么?notifyChange()

谢谢你,克里斯蒂

0 投票
2 回答
2062 浏览

android - 自定义 CursorAdapter 和 CheckBox 状态

我在尝试使用建议的 CursorAdapter 实现时遇到问题与 CursorLoader 一起使用。当我可以通过 Cursor 为其提供一组静态数据时,CursorAdapter 工作得很好,但是当我尝试将它与 CursorLoader 结合使用时,我遇到了空指针的问题。我把它归结为这样一个事实,即当我向适配器提供一个游标时,它最初是空的(在处理 CursorLoader 实现时经常建议设置为 null)。适配器在实例化时循环通过光标来确定复选框处于什么状态,然后通过在各种文本视图和小部件中填充数据。不幸的是,光标在实例化时为空,只有在 CursorLoader 完成时才被提供数据集。我试图弄清楚是否可以将此 CursorAdapter 与 CursorLoader 一起使用,并且非常感谢一些帮助。

这是我的完整适配器: