问题标签 [android-loadermanager]
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 的 restartLoader 方法中的 NullPointerException
我的片段中有以下自己的接口实现:
FragmentActivity 向这个 Fragment 报告,另一个 Fragment(选择列表)已经选择了一个项目。之后,ListFragment 应加载具有报告 ID (_ReportId) 的新数据。
但我NullPoinerException
在去 onCreateLoader-Method 之前得到了这段代码。这是LogCat:
我不明白为什么。相同的代码(但对于另一个列表)在另一个 FragmentActivity 上工作正常。
android - 对 CursorLoaders 感到困惑,并将它们与自定义 SQLiteOpenHelper 一起使用
我正在编写一个应用程序,允许人们为他们需要执行的各种任务设置警报。我目前的计划是将所有相关数据存储到 SQLite 数据库中。为此,我创建了一个扩展 SQLiteOpenHelper 的类,并在其中填充了处理我期望必须接受的所有 CRUD 的方法。知道在一个线程上进行所有处理通常是一个坏主意,我查找了在线程之间分离工作的方法,并找到了 CursorLoader 和 LoaderManager,这似乎很理想,因为它们在 Android 兼容库中可用。但是,LoaderManager 似乎需要按照文档中的教程进行的 ContentProvider,并且我还没有真正看到需要对 ContentProviders 做任何事情,因为我不打算允许其他应用程序访问数据。如果没有 ContentProvider,我不知道我应该如何为我的数据库获取一个 Uri 以输入 CursorLoader。有没有办法让我继续使用扩展 SQLiteOpenHelper 的类并仍然实现 LoaderManager 以允许我将所有填充的 ListFragments 与我的光标保持在 UI 线程之外?
android - LoaderManager 离线获取数据,然后在线
我想遵循这个很好的可用性模式,应用程序离线存储数据以获得更快的响应,并在它在线获取新数据时更新它。
我使用Loaders
with LoaderManager
。
现在,实施上述方法的正确方法是什么Loaders
?
目前我使用两种方法,它们都有缺点,而且通常不是很优雅。
- 将数据存储在应用程序上下文中,而不是 SQLite
- 两个单独的
AsyncTaskLoaders
-offlineLoader
和onlineLoader
。第一个从 SQLite 数据库中获取数据并立即显示它,如果它在那里,第二个从外部服务器加载数据,将其写入数据库(用于 offlineLoader)并替换离线数据
我真正想要的是:
一个加载器,它离线获取数据并将其返回给 LoaderManager,但之后继续工作并在准备好时返回新的在线数据。所以它应该返回两次 - 甚至可能吗?
java - 在 AsyncTask 中使用从 LoaderManager 返回的游标
onLoadFinished
我在回调(来自)上返回了一个游标LoaderManager.LoaderCallbacks
,我想对这个游标进行一些(可能成本高昂的)后处理。所以,我正在启动一个AsyncTask
使用此光标的程序。但是,我遇到了此异常的间歇性崩溃:
我怀疑这是因为游标(由 UI 线程中的加载程序管理)在后台线程完成之前关闭,因为这是一个托管游标。这是一些转述的代码:
有没有可能,
以某种方式标记光标以防止它从 UI 线程中关闭。
通知经理游标仍在使用中。
克隆它,以便克隆的实例不会被管理器关闭。
另一个更好的解决方案?
然而,在 UI 线程上完成此后处理绝对不是一种选择,因为它可能非常昂贵。
android - How do I wait for two cursorloaders to return with data before starting third dependent on the return data?
I have an android app using fragments and a content provider to access my local sqlite database. The Listviews often depend on several database queries such that their display is based on the query results. Assuming I have three cursorloaders, how do I ensure loader 1 and 2 have both completed before running loader 3?
java - 安卓:CursorLoader、LoaderManager、SQLite
尝试更新我不推荐使用某些方法的旧应用程序。我发现如果我想使用显示来自 db 的数据的 ListView,我应该使用 LoaderManager + CursorLoader。CursorLoader 与内容提供者一起工作。那么对于我的数据库中的每个表,我现在应该创建内容提供程序吗?我为什么要 ?据我所知,内容提供者用于与其他应用程序共享一些数据库信息,但我的应用程序不共享任何信息。那么我可以在没有内容提供者的情况下使用 CursorLoader 吗???
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
吗?目标是不引起任何内存泄漏并提高效率。