问题标签 [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.
android - 为什么我的 LoaderManager/CursorLoader 组合在 ListView 中显示数据库查询时无法正常工作?
我整天都在为此工作,并一直试图了解它们是如何组合在一起的,并重新编写我的代码以使其很好地组合在一起。
所以我会告诉你我有什么。没有错误,只是空白。
MyAgendaLoaderManager.java:
CalProvider.java:
如果它很重要,下面是在主要活动中运行它的代码:
我只是不明白它是如何空白的。请记住,我故意在 CursorLoader 和 LoaderManager 中留了一些空白,因为我不想全部填写以发现有错误,所以我只是在测试是否显示初始列表,并且它不是。任何帮助找出我做错了什么将不胜感激。
编辑:实际上,现在我考虑了一下,除了当我的适配器创建包含它的视图时,没有什么能真正将我正在做的事情与特定列表联系起来。但该视图不是常规布局的一部分。所以也许这就是我的错误,不幸的是我不知道该怎么做。
android - 如何在覆盖 onItemClick() 的 setOnItemClickListener() 中访问 getLoaderManager()?
所以我被困在如何从该范围内访问我的 getLoadManager 。我真正想做的就是刷新光标,因为 LoaderManager 在到达该点之前已经创建,但我现在除了调用 getLoaderManager() 之外真的不知道如何完成它。问题是我不能在那个范围内。有任何想法吗?提前致谢。
android - 如何从 CursorLoader 刷新光标?
所以我有我的MainDisplayActivity
which 实现了Activity
和LoaderManager.LoaderCallbacks<Cursor>
。这里我有 A ListView
,我使用 ContentProvider 从我的数据库中获取的议程信息填充它。我也有GridView
一个日历。我在单击单元格时设置了它,议程会随着单击的日期更新。我的问题是,当重用我在onCreate()
setOnItemClickListener() 内部创建的加载器时,它不会用我正在创建的新光标刷新信息。我可以用另一个 ID 创建一个新的加载器,它可以工作一次,但是一旦我点击另一天,它就会停止刷新。问题出在光标上。如何从 Loader 刷新光标,这样我就不必继续创建新的 Loader?提前致谢!
MainDisplayActivity
在 My类的 onCreate() 中创建 Loader 的初始调用:
这些是覆盖的方法LoaderCallbacks<Cursor>
需要任何其他代码,请随时询问。再次感谢任何帮助!
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
吗?目标是不引起任何内存泄漏并提高效率。
android - 在 LoaderManager 和 MediaStore 中使用多个 Loader “找不到这样的列”
从音乐的标题中,尝试得到对应的艺术家、专辑名称和专辑封面。我使用LoaderManager
和CursorLoader
。创建 Activity 后,我用getLoaderManager().initLoader(1, null, this)
. 这是我的加载器的代码:
在创建加载器时
加载完成
该变量album
是为整个类定义的,dataalbumsTrackRequested
是一个字符串,等于所需专辑的标题。
该应用程序崩溃,我得到:
如果我删除了第二个加载器(Id=2),那么封面当然不会显示,但应用程序不会崩溃。所以问题来自第二个Loader。
我究竟做错了什么 ?我确信这个专栏album_art
存在,因为我已经在我的另一个应用程序中获得了这样的封面。但是在这里,我找不到错误的来源。是因为我使用了多个 Loaders 吗?
android - 如何通过 CursorLoader 使用 ContentProvider 的 insert() 方法将值正确插入 SQLite 数据库?
我正在阅读文档,但我仍然不太确定。它说要使用getContentResolver()
,但实际上并没有使用 CursorLoader。那么有没有办法通过CursorLoader
呢?我知道该怎么做query()
。步骤是否非常相似?即使只是一个准确解释这一点的链接也会有所帮助。
请注意,不要将我链接到 Google 文档,因为他们没有使用insert()
ContentProvider 使用CursorLoader
.
提前致谢!!
编辑:我可能应该提到我对此感到困惑的原因是因为调用了一个新的CursorLoader
自动调用ContentProviders
query()
方法。但是我怎样才能为插入做同样的事情呢?
android - 带 LoaderManager 的 CursorLoader 如何知道将光标发送到 CursorAdapter?
我正在浏览我的一些代码,我意识到我实际上并不知道 aCursorLoader
和LoaderManager
组合如何与CursorAdapter
连接一起使用。这是我感到困惑的部分。
query()
那么我自定义的方法如何ContentProvider
知道将其发送到特定的CursorAdapter
?我只是没有看到联系。我了解其中的所有其他内容,但这个问题是关于什么的。哦,我应该提一下,代码工作正常。
android - SherlockFragmentActivity 与多个 ListFragment 和 SQLite 游标战斗
我正在使用一个扩展SherlockFragmentActivity的 Activity ,它有 3 个选项卡。这 3 个选项卡是实现LoaderManager.LoaderCallbacks的ListFragments。Activity 的 OnCreate 方法像这样加载选项卡
我将标签加载到的布局非常简单:
每个选项卡都有一个与此相同的类,只是称为不同的:
它使用此处定义的SimpleCursorLoaded:
我遇到的问题是,当我选择说.. 第二个选项卡(第三个选项卡也是如此)时,它会尝试加载光标,但是当它尝试填充 list_items 时,我收到一条错误消息
在设置了几个断点之后,我发现它尝试使用的光标是第一个选项卡中的光标,它在通货膨胀时加载良好,但显然没有关闭,并且显然试图再次使用,即使我(认为)正在向它发送与 getAllVenues() 不同的光标
编辑:这是堆栈跟踪发送给我的最后一个地方 当我设置一些断点时,我可以看到这里提供的光标是第一个选项卡的光标,而不是 Venue 选项卡的光标。
编辑:显示 getAllVenues 方法的 VenuesDataSource 代码
android - Android Instrumentation 测试:ListView 内容未加载
我正在尝试为我的 android 项目编写测试类,但在填充列表视图时遇到了一些问题。
我的活动使用 Intents 提供的值对应用程序数据库执行请求:
LoaderUtils 类实现了LoaderCallbacks,populateListView 方法使用了一个CursorLoader 将DB 数据加载到适配器,并绑定到我的ListView。运行我的应用程序时它工作正常,但是当我尝试实现测试用例时,我遇到了一些问题。
当我执行我的 testInit 时,适配器返回的光标是空的,而当我使用模拟器“真正”运行我的应用程序时它不是。
问题可能是我的 Intent 初始化错误,或者测试用例不允许使用 Cursor Loaders?因此,如果有人能指出我做错了什么,将不胜感激。谢谢!
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