问题标签 [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.

0 投票
1 回答
2551 浏览

android - LoaderManager 的 restartLoader 方法中的 NullPointerException

我的片段中有以下自己的接口实现:

FragmentActivity 向这个 Fragment 报告,另一个 Fragment(选择列表)已经选择了一个项目。之后,ListFragment 应加载具有报告 ID (_ReportId) 的新数据。

但我NullPoinerException在去 onCreateLoader-Method 之前得到了这段代码。这是LogCat:

我不明白为什么。相同的代码(但对于另一个列表)在另一个 FragmentActivity 上工作正常。

0 投票
1 回答
2020 浏览

android - 对 CursorLoaders 感到困惑,并将它们与自定义 SQLiteOpenHelper 一起使用

我正在编写一个应用程序,允许人们为他们需要执行的各种任务设置警报。我目前的计划是将所有相关数据存储到 SQLite 数据库中。为此,我创建了一个扩展 SQLiteOpenHelper 的类,并在其中填充了处理我期望必须接受的所有 CRUD 的方法。知道在一个线程上进行所有处理通常是一个坏主意,我查找了在线程之间分离工作的方法,并找到了 CursorLoader 和 LoaderManager,这似乎很理想,因为它们在 Android 兼容库中可用。但是,LoaderManager 似乎需要按照文档中的教程进行的 ContentProvider,并且我还没有真正看到需要对 ContentProviders 做任何事情,因为我不打算允许其他应用程序访问数据。如果没有 ContentProvider,我不知道我应该如何为我的数据库获取一个 Uri 以输入 CursorLoader。有没有办法让我继续使用扩展 SQLiteOpenHelper 的类并仍然实现 LoaderManager 以允许我将所有填充的 ListFragments 与我的光标保持在 UI 线程之外?

0 投票
1 回答
504 浏览

android - LoaderManager 离线获取数据,然后在线

我想遵循这个很好的可用性模式,应用程序离线存储数据以获得更快的响应,并在它在线获取新数据时更新它。

我使用Loaderswith LoaderManager

现在,实施上述方法的正确方法是什么Loaders

目前我使用两种方法,它们都有缺点,而且通常不是很优雅。

  1. 将数据存储在应用程序上下文中,而不是 SQLite
  2. 两个单独的AsyncTaskLoaders-offlineLoaderonlineLoader。第一个从 SQLite 数据库中获取数据并立即显示它,如果它在那里,第二个从外部服务器加载数据,将其写入数据库(用于 offlineLoader)并替换离线数据

我真正想要的是:

一个加载器,它离线获取数据并将其返回给 LoaderManager,但之后继续工作并在准备好时返回新的在线数据。所以它应该返回两次 - 甚至可能吗?

0 投票
2 回答
1718 浏览

java - 在 AsyncTask 中使用从 LoaderManager 返回的游标

onLoadFinished我在回调(来自)上返回了一个游标LoaderManager.LoaderCallbacks,我想对这个游标进行一些(可能成本高昂的)后处理。所以,我正在启动一个AsyncTask使用此光标的程序。但是,我遇到了此异常的间歇性崩溃:

我怀疑这是因为游标(由 UI 线程中的加载程序管理)在后台线程完成之前关闭,因为这是一个托管游标。这是一些转述的代码:

有没有可能,

  1. 以某种方式标记光标以防止它从 UI 线程中关闭。

  2. 通知经理游标仍在使用中。

  3. 克隆它,以便克隆的实例不会被管理器关闭。

  4. 另一个更好的解决方案?

然而,在 UI 线程上完成此后处理绝对不是一种选择,因为它可能非常昂贵。

0 投票
1 回答
1239 浏览

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?

0 投票
2 回答
17331 浏览

java - 安卓:CursorLoader、LoaderManager、SQLite

尝试更新我不推荐使用某些方法的旧应用程序。我发现如果我想使用显示来自 db 的数据的 ListView,我应该使用 LoaderManager + CursorLoader。CursorLoader 与内容提供者一起工作。那么对于我的数据库中的每个表,我现在应该创建内容提供程序吗?我为什么要 ?据我所知,内容提供者用于与其他应用程序共享一些数据库信息,但我的应用程序不共享任何信息。那么我可以在没有内容提供者的情况下使用 CursorLoader 吗???

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吗?目标是不引起任何内存泄漏并提高效率。