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

android - Android SimpleCursorAdapter 和 CursorLoader 的使用

我是 Android 新手,我正试图让我的标题围绕SimpleCursorAdapterCursorLoader类。据我了解,我看到的所有示例都使用这两个类将数据加载到ListView后台线程中(不阻塞 UI)。

我对此很满意,并在我自己的项目列表中使用了这种通用方法,但是我现在希望能够单击列表中的一个项目并获取该项目的完整信息。SimpleCursorAdapter使用和CursorLoader检索单个项目的详细信息是通常的做法吗?还是它们只是用于列表?

谢谢。

0 投票
1 回答
547 浏览

android - 在 ListFragment 中使用 CursorLoader 查询未返回任何数据

我继续努力让查询与 ListFragment 中的 CursorLoader 一起工作。我怀疑我的部分问题是我不确定某些细节。我有一个 xml 文件 myfragment.xml,它定义了我的应用程序中的两个片段。第一个片段,我的 ListFragment,由以下内容标识:

当我在 ListFragment 类中调用 SimpleCursorAdapter 时,我相信我应该这样做:

其中 info 是我从以前的活动中传递的 Bundle。那正确吗?此外,我还看到了一些示例,其中 0 作为 SimpleCursorAdapter 的最后一个参数,其他示例使用 CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER。有什么不同?最后,此页面 可能表明我必须在我的代码中检索 LoaderManager,如下所示:

}

但这是我见过的唯一地方。这是必要的吗?我希望获得这些问题的答案将帮助我深入了解为什么我的查询没有返回任何结果。我相当有信心此时正在创建和填充我的数据库。非常感谢!

按照下面的要求,这里是我的 LoaderManager.LoaderCallbacks 接口的三个方法:

让我补充一下,我已经通过调试器验证了 onCreateLoader 方法中的 args.GetString("Level") 是“Beginning”,它应该是。

0 投票
1 回答
3079 浏览

android - CursorLoader 不在 Fragment 中显示数据

我有一个应用程序,它执行以下操作:带有 ListView 的 Activity 显示三个项目:Beginning、Intermediate、Advanced。根据用户的选择,应用程序应该转到带有 ListView 的 Fragment,它显示来自底层 SQLiteDatabase 的所有项目,其中 Level=Beginning 或 Intermediate 或 Advanced。这第二步对我不起作用。我已经通过调试器验证了我的数据库中有数据,所以这不是问题。这是我在初始 Activity 中的代码 - 这是来自 onItemClick 方法:

这是 StitchList 类,它是 Fragment 类,在上面的代码中引用:

}

这是 Fragment 的 XML 文件,称为stitchfragment.xml:

这是 ListFrag 类。我正在使用支持库和带有 ContentProvider 的 CursorLoader,称为 StitchProvider;SQLiteDatabase 称为 SQLData:

}

onListItemClick 方法用于在详细信息片段中显示数据,但我从来没有走到这一步。根据 Intent 中的数据从数据库中检索到的项目列表永远不会显示。

一些可能的问题/问题浮现在脑海中:

1) 我在 onCreateLoader 方法中的查询语法是否正确?例如,它应该是“stitchlevel='Beginning'”。我知道 args.getString("Level") 中的数据是有效的,因为我已经在调试器中完成了它,但是这里的语法是否正确?我假设它应该是标准的 SQL 语法,但是...... 2)在片段的 onActivityCreated 方法中为 viewID 分配值时,我是否指向正确的位置?3) 同样,在下一行 SimpleCursorAdapter 中,这里的 android.R.layout.simple_list_item_1 是否正确?还是应该是 R.layout.stitchfragment?4)我在ContentProvider的查询方法上放了一个断点,我从来没有打过断点。创建 CursorLoader 时不应该吗?此外,如果我在 List Fragment 的 onLoadFinished 方法上设置断点,光标为空。我错过了什么 5) 我被告知 Fragment 的 onActivityCreated 方法中的 dataColumns 应该包含我的表的 _id 列。真的吗?这对我来说似乎很奇怪,因为列表只会显示一条信息:stitchname。但是,无论此处是否包含 _id,Fragment 列表都不会显示任何内容 6) 我是否可以像在 Fragment 的 onActivityCreatedMethod 中那样通过 getLoaderManager.initLoader 将 Bundle、信息传递给 CursorLoader?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 我错过了什么 5) 我被告知 Fragment 的 onActivityCreated 方法中的 dataColumns 应该包含我的表的 _id 列。真的吗?这对我来说似乎很奇怪,因为列表只会显示一条信息:stitchname。但是,无论是否包含 _id,Fragment 列表都不会显示任何内容 6) 我是否可以像在 Fragment 的 onActivityCreatedMethod 中那样通过 getLoaderManager.initLoader 将 Bundle、信息传递给 CursorLoader?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 我错过了什么 5) 我被告知 Fragment 的 onActivityCreated 方法中的 dataColumns 应该包含我的表的 _id 列。真的吗?这对我来说似乎很奇怪,因为列表只会显示一条信息:stitchname。但是,无论是否包含 _id,Fragment 列表都不会显示任何内容 6) 我是否可以像在 Fragment 的 onActivityCreatedMethod 中那样通过 getLoaderManager.initLoader 将 Bundle、信息传递给 CursorLoader?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 因为该列表只会显示一条信息:针迹名称。但是,无论此处是否包含 _id,Fragment 列表都不会显示任何内容 6) 我是否可以像在 Fragment 的 onActivityCreatedMethod 中那样通过 getLoaderManager.initLoader 将 Bundle、信息传递给 CursorLoader?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 因为该列表只会显示一条信息:针迹名称。但是,无论此处是否包含 _id,Fragment 列表都不会显示任何内容 6) 我是否可以像在 Fragment 的 onActivityCreatedMethod 中那样通过 getLoaderManager.initLoader 将 Bundle、信息传递给 CursorLoader?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 就像我在 Fragment 的 onActivityCreatedMethod 中所做的那样?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我.... 就像我在 Fragment 的 onActivityCreatedMethod 中所做的那样?7) 我已经看到在片段的 onActivityCreated 方法中在 getLoaderManager().initLoader() 之前调用 setListAdapter 的示例,并且我看到了之后调用 setListAdapter 的示例。哪个是对的?似乎都没有帮助我....

如果我简单地这样做,我就可以显示一个片段:

所以我知道我可以在 Fragment 中显示数据;它似乎不适用于 CursorLoader 和 ContentProvider。我希望这不是信息过载;如果是的话,我很抱歉。如果有人有任何想法,我将不胜感激。

0 投票
2 回答
2153 浏览

android - 如何从 ListFragment 获取信息

我有一个使用 CursorLoader 填充的 ListFragment。填充 ListFragment 后,我​​有一个 OnItemClickListener 方法,我想在该方法中识别用户选择的 List Fragment 中的哪个项目。我该怎么做呢?我试过了:

其中 position 是传递给 onClickItemListener 方法的整数,如下所示:

所有这些都会抛出一种或另一种类型的强制转换异常。我难住了。这似乎是一件简单的事情。供您参考,以下是列表片段的填充方式:

任何建议都将受到欢迎,谢谢!

0 投票
2 回答
1575 浏览

android - 非活动中的 CursorLoader

我有一个小项目,我从内容提供商那里读取系统指标,如呼叫日志、短信日志等。

我创建了(Call/SMS)Logger类来从内容提供者读取信息并将信息保存在(Call/SMS)Metrics类的对象中。

MainActivity使用(Call/SMS)Metrics类的对象中的信息,并使用 databaseOpenHelper 类将数据保存在我自己的数据库中。

现在我打算使用 CursorLoader 从 contentproviders 加载数据。

我看到的例子表明 MainActivity 实现了 LoaderManager.LoaderCallbacks

当对非活动类进行实际查询时,如何在我的项目中使用它?

我可以在 Activity 中创建 I 1 loaderManger 并用于每个非 Activity 吗?

以下是一些示例代码片段:

从 Main Activity 我调用数据集合,我将上下文传递给 clssess 以便他们可以在管理器光标中使用它

SystemMetricsCollector 中用于获取 SMSData 的方法

SMSLogger 类中的变量。

SMSLogger 中使用游标读取数据的方法

0 投票
2 回答
664 浏览

android - Android - 重新查询由 RANDOM() 排序的游标

这听起来像是一个愚蠢的问题,但我正在努力解决这个问题。我正在开发一个报价应用程序,因此我希望每次启动应用程序时都从数据库中随机订购报价。

我正在使用 CursorLoader 和 ViewPager。我在屏幕上有一些按钮(放入收藏夹按钮),它使用内容解析器更新数据库中的列,该内容解析器在 ContentProvider 中触发 update()。然后更新会导致重新查询以更新所做的更改。都是标准的。

这当然会导致由于 random() 子句的 order 而给我排序不同的行,并导致屏幕“消失”。

知道如何解决这个问题吗?我真的很想保留随机排序功能。

0 投票
2 回答
1593 浏览

android - 处理 CursorLoader 异常

我有一个 Fragment 实现 LoaderManager 并使用 CursorLoader (没什么花哨的)。我想捕获查询期间抛出的异常,但我不知道怎么做!!!有什么帮助吗?谢谢。

0 投票
2 回答
5391 浏览

java - MediaStore.Images.Thumbnails.getThumbnail 返回错误的缩略图而不是 NULL

考虑如下图所示的场景:

原生画廊

三张照片,其中一张是大型 GIF 文件 (3MP)。

我正在查询 MediaStore 以检索相应的缩略图。如果我使用此 sortOrder 通过 CursorLoader 初始化游标:

会发生什么: MediaStore 返回上一个成功检索的缩略图:

DESC

预期行为:当 MediaStore 由于某种原因无法检索给定图像的缩略图时,它必须返回 NULL,根据其 Javadoc:“...返回一个 Bitmap 实例。如果与 origId 关联的原始图像没有,它可能为 null存在或内存不足。”

如果我用这个 sortOrder 初始化游标:

它运行得很好:

ASC

但是我不能简单地更改 sortOrder,因为要求是首先显示最新的图片。

下面是我的示例代码,这里是完整的示例项目以及用于重现的三个图像

我错过了什么吗?有谁知道可能出了什么问题?

无论如何,我填写了一个针对 Android 的错误

编辑

这个问题似乎在 Lollipop 中得到了解决。(对该线程的最后评论)。

0 投票
0 回答
443 浏览

android - Android 应用程序在 onLoadFinished() 上崩溃

我正在使用 SQLite 数据库来存储名为 Reservations 的对象,这些对象显示在 ListView 中。我曾经将光标与已弃用的函数 startManagingCursor() 一起使用,但当显示 ListView 的活动时,它会使我的应用程序崩溃。

所以我尝试使用 CursorLoaders 和 ContentProviders 来代替,我这样做了:

出于某种原因,我一直在调查,一旦我启动此活动,应用程序就会崩溃。

这是我的内容提供者:

我做错了什么?:( 提前致谢。

PS:ReservationsBDD 是一个从 MaBaseSQLite 获取项目的 DAO,它是一个 SQLiteOpenHelper。

0 投票
2 回答
7222 浏览

android - Android:在 ContentProvider 中处理非常大的数据集以避免内存限制

我正在使用 aContentProvider来查询数据库并返回 aCursor中使用的 a CursorLoader

项目活动:

项目内容提供者:

该活动有一个ListView,我正在使用一个CursorAdapter(通过更新LoaderCallbacks)来表示游标内的数据。

这工作正常,直到我需要在大型数据集中查找项目(例如,超过 30,000 行)。观察日志,我发现查找超出了内存限制,并且从结果游标中删除了一些行。

我的问题:当使用这样的游标时,处理非常大的数据集的最佳方法是什么?

我当前的解决方案是将 SQLite 查询ContentProvider分解为具有偏移量和限制的查询序列,然后使用MergeCursor类组合这些查询:

这将加载所有数据,但在第一次进行查找时会有很长的延迟。执行多个查询时,列表视图大约 5 秒为空。

请注意,当我尝试单个查找(而不是批量查找)时,加载几乎是瞬时的,尽管在达到内存限制时滚动列表时会有轻微的暂停。

所以:

使用单个查询:快速列表视图更新,但达到滚动暂停和内存限制。

使用批处理查询:列表视图更新缓慢,但滚动很流畅,没有达到内存限制。

我想知道是否有更好的解决方案可以快速更新列表视图,但在滚动列表时也会根据需要获取更多数据。

安卓 4.2.1,Nexus 7