问题标签 [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 投票
1 回答
1174 浏览

android - 为什么我的 LoaderManager/CursorLoader 组合在 ListView 中显示数据库查询时无法正常工作?

我整天都在为此工作,并一直试图了解它们是如何组合在一起的,并重新编写我的代码以使其很好地组合在一起。
所以我会告诉你我有什么。没有错误,只是空白。

MyAgendaLoaderManager.java:


CalProvider.java:


如果它很重要,下面是在主要活动中运行它的代码:

我只是不明白它是如何空白的。请记住,我故意在 CursorLoader 和 LoaderManager 中留了一些空白,因为我不想全部填写以发现有错误,所以我只是在测试是否显示初始列表,并且它不是。任何帮助找出我做错了什么将不胜感激。

编辑:实际上,现在我考虑了一下,除了当我的适配器创建包含它的视图时,没有什么能真正将我正在做的事情与特定列表联系起来。但该视图不是常规布局的一部分。所以也许这就是我的错误,不幸的是我不知道该怎么做。

0 投票
1 回答
1005 浏览

android - 如何在覆盖 onItemClick() 的 setOnItemClickListener() 中访问 getLoaderManager()?

所以我被困在如何从该范围内访问我的 getLoadManager 。我真正想做的就是刷新光标,因为 LoaderManager 在到达该点之前已经创建,但我现在除了调用 getLoaderManager() 之外真的不知道如何完成它。问题是我不能在那个范围内。有任何想法吗?提前致谢。

0 投票
1 回答
19522 浏览

android - 如何从 CursorLoader 刷新光标?

所以我有我的MainDisplayActivitywhich 实现了ActivityLoaderManager.LoaderCallbacks<Cursor>。这里我有 A ListView,我使用 ContentProvider 从我的数据库中获取的议程信息填充它。我也有GridView一个日历。我在单击单元格时设置了它,议程会随着单击的日期更新。我的问题是,当重用我在onCreate()setOnItemClickListener() 内部创建的加载器时,它不会用我正在创建的新光标刷新信息。我可以用另一个 ID 创建一个新的加载器,它可以工作一次,但是一旦我点击另一天,它就会停止刷新。问题出在光标上。如何从 Loader 刷新光标,这样我就不必继续创建新的 Loader?提前致谢!

MainDisplayActivity在 My类的 onCreate() 中创建 Loader 的初始调用:

这些是覆盖的方法LoaderCallbacks<Cursor>

需要任何其他代码,请随时询问。再次感谢任何帮助!

0 投票
1 回答
7485 浏览

android - 设置什么 CursorAdapter(Context context, Cursor c, int flags) 以使其与 CursorLoader 一起工作?

谷歌文档指出不要使用第CursorAdapters一个构造函数,

只有另外两个选择,

它说

允许控制自动重新查询的构造函数。建议您不要使用它,而是使用 CursorAdapter(Context, Cursor, int)。使用此构造函数时,将始终设置 FLAG_REGISTER_CONTENT_OBSERVER。`

这表示它是推荐的构造函数。

问题是这里的最后一个构造函数只有两个标志可以使用,FLAG_AUTO_REQUERY(int 1) 和FLAG_REGISTER_CONTENT_OBSERVER(int 2)。使用FLAG_AUTO_REQUERY没有意义,因为我现在使用 CursorLoader 在后台管理它并更新它。使用FLAG_REGISTER_CONTENT_OBSERVER时,它表示不需要CursorLoader

现在我问,我要传递什么整数CursorAdapter(Context context, Cursor c, int flags)才能使其正常工作CursorAdapter?让我担心的是如何正确管理旧光标。我不确定这样做的正确方法。

如果我使用FLAG_REGISTER_CONTENT_OBSERVER,那么我必须对 做一些事情onContentChanged(),但是swapCursor()在我的 中使用时LoaderManager,由于光标没有关闭,我只能做adapter.swapCursor(cursor).close(). 但这会与onContentChanged()in冲突CursorAdapter吗?目标是不引起任何内存泄漏并提高效率。

0 投票
1 回答
1635 浏览

android - 在 LoaderManager 和 MediaStore 中使用多个 Loader “找不到这样的列”

从音乐的标题中,尝试得到对应的艺术家、专辑名称和专辑封面。我使用LoaderManagerCursorLoader。创建 Activity 后,我用getLoaderManager().initLoader(1, null, this). 这是我的加载器的代码:

在创建加载器时

加载完成

该变量album是为整个类定义的,dataalbumsTrackRequested是一个字符串,等于所需专辑的标题。

该应用程序崩溃,我得到:

如果我删除了第二个加载器(Id=2),那么封面当然不会显示,但应用程序不会崩溃。所以问题来自第二个Loader。

我究竟做错了什么 ?我确信这个专栏album_art存在,因为我已经在我的另一个应用程序中获得了这样的封面。但是在这里,我找不到错误的来源。是因为我使用了多个 Loaders 吗?

0 投票
2 回答
21849 浏览

android - 如何通过 CursorLoader 使用 ContentProvider 的 insert() 方法将值正确插入 SQLite 数据库?

我正在阅读文档,但我仍然不太确定。它说要使用getContentResolver(),但实际上并没有使用 CursorLoader。那么有没有办法通过CursorLoader呢?我知道该怎么做query()。步骤是否非常相似?即使只是一个准确解释这一点的链接也会有所帮助。

请注意,不要将我链接到 Google 文档,因为他们没有使用insert()ContentProvider 使用CursorLoader.

提前致谢!!

编辑:我可能应该提到我对此感到困惑的原因是因为调用了一个新的CursorLoader自动调用ContentProviders query()方法。但是我怎样才能为插入做同样的事情呢?

0 投票
1 回答
21152 浏览

android - 带 LoaderManager 的 CursorLoader 如何知道将光标发送到 CursorAdapter?

我正在浏览我的一些代码,我意识到我实际上并不知道 aCursorLoaderLoaderManager组合如何与CursorAdapter连接一起使用。这是我感到困惑的部分。

query()那么我自定义的方法如何ContentProvider知道将其发送到特定的CursorAdapter?我只是没有看到联系。我了解其中的所有其他内容,但这个问题是关于什么的。哦,我应该提一下,代码工作正常。

0 投票
3 回答
2671 浏览

android - SherlockFragmentActivity 与多个 ListFragment 和 SQLite 游标战斗

我正在使用一个扩展SherlockFragmentActivity的 Activity ,它有 3 个选项卡。这 3 个选项卡是实现LoaderManager.LoaderCallbacks的ListFragments。Activity 的 OnCreate 方法像这样加载选项卡

我将标签加载到的布局非常简单:

每个选项卡都有一个与此相同的类,只是称为不同的:

它使用此处定义的SimpleCursorLoaded

我遇到的问题是,当我选择说.. 第二个选项卡(第三个选项卡也是如此)时,它会尝试加载光标,但是当它尝试填充 list_items 时,我收到一条错误消息

在设置了几个断点之后,我发现它尝试使用的光标是第一个选项卡中的光标,它在通货膨胀时加载良好,但显然没有关闭,并且显然试图再次使用,即使我(认为)正在向它发送与 getAllVenues() 不同的光标

编辑:这是堆栈跟踪发送给我的最后一个地方 当我设置一些断点时,我可以看到这里提供的光标是第一个选项卡的光标,而不是 Venue 选项卡的光标。

在此处输入图像描述

编辑:显示 getAllVenues 方法的 VenuesDataSource 代码

0 投票
1 回答
483 浏览

android - Android Instrumentation 测试:ListView 内容未加载

我正在尝试为我的 android 项目编写测试类,但在填充列表视图时遇到了一些问题。

我的活动使用 Intents 提供的值对应用程序数据库执行请求:

LoaderUtils 类实现了LoaderCallbacks,populateListView 方法使用了一个CursorLoader 将DB 数据加载到适配器,并绑定到我的ListView。运行我的应用程序时它工作正常,但是当我尝试实现测试用例时,我遇到了一些问题。

当我执行我的 testInit 时,适配器返回的光标是空的,而当我使用模拟器“真正”运行我的应用程序时它不是。

问题可能是我的 Intent 初始化错误,或者测试用例不允许使用 Cursor Loaders?因此,如果有人能指出我做错了什么,将不胜感激。谢谢!

0 投票
1 回答
7120 浏览

android-fragments - Android IllegalStateException:片段未附加到 Activity

我遇到了这个问题,并在这里和其他地方都提出了许多与这个问题相关的帖子。

此应用程序针对 android 16,但 min 设置为 8。所以我使用 Android Support Library 来访问更新的 api。

我有一个加载一个片段的活动,它是一个 ListFragment。如果您在平板电脑上以横向模式运行,当单击列表项时,第一个片段将在 2 窗格布局中加载第二个片段。如果在手机上,新的活动会加载第二个片段。

第二个片段使用 CursorLoader 访问 ContentProvider 作为其后备数据存储。当从它自己的活动中调用这个片段时,没有问题。但是,当它在 2 窗格布局中时,CursorLoader 将失败并出现上述异常。

这是代码:

问题出现在方法 loadPrograms 中,特别是以下行:

这是抛出 IllegalStateException。在查看了文档和大量示例之后,我从来没有看到过这个问题并且必须被抓住才能继续。

我将代码包装在一个 try/catch 块中,只是为了看看会发生什么,令我惊讶的是,该应用程序按预期运行。

编辑:这是建立 2 窗格布局的活动代码:

侦听器方法 onProgramGroupSelected 是确定单窗格与 2 窗格布局的地方。当单击左侧疼痛中的列表项时,将调用侦听器。

谁能解释为什么会发生这种异常?

该项目的完整代码位于https://github.com/MythTV-Android/mythtv-for-android