问题标签 [android-loader]

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 投票
3 回答
5765 浏览

android - Android Honeycomb 中的加载程序

我试图弄清楚如何Loaders在 Android 3.0 中使用,但似乎无法让它工作。文档仅描述 usingCursorLoader但我正在使用AsyncTaskLoader.

从文档看来,您应该只需要实现AsyncTaskLoader.loadInBackground(),但它永远不会被调用getLoaderManager().initLoader(),然后在回调中创建加载程序。

我可以看到调试消息说它Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}似乎已成功创建。

加载器当前是否可能在 SDK 中损坏,或者在创建加载器后需要调用某些方法?(他们在示例中没有这样做CursorLoader)。

编辑:似乎调用forceLoad()从返回initLoader()的加载程序至少开始加载,但这意味着您无法正确处理旋转:(

0 投票
2 回答
2591 浏览

android - Honeycomb Loaders 可以解决 AsyncTask + UI 更新的问题吗?

在后台做一些事情然后更新 UI 很难在 Android 中正确实现。它只是设计得很糟糕。典型示例是从 Web 获取内容并显示结果的 AsyncTask。这有两个问题:

  1. AsyncTask 有一个对 Activity 的引用(因为它需要更新它的 UI)。屏幕方向更改后,Activity 会重新启动。但是 AsyncTask 仍然引用旧的销毁 Activity,因此它不能更新新 Activity 的 UI。

  2. 这可能导致 OutOfMemoryException。想象一下,你有一个包含很多位图的 Activity 并启动了一些 AsyncTask。您按 BACK(活动已完成)但 AsyncTask 仍在运行,因为它引用了 Activity,所以带有位图的 Activity 仍在内存中。重复此操作(启动 Activity 和 BACK),您迟早会强制关闭。

这个可以解决,但是太复杂了。在一个 Activity 中,我有 3 个不同的 AsyncTask,它们中的每一个都可以同时在多个实例中运行。正确实施这一点令人沮丧。代码变得非常难以理解和调试。

蜂窝装载机能以某种方式解决这个问题吗?有没有办法在 Honeycomb 之前的 Android 版本中使用它们?

0 投票
3 回答
27714 浏览

android - 具有多个加载器的 LoaderManager:如何获得正确的光标加载器

对我来说,如果您有多个加载器,则不清楚如何获得正确的光标。假设您定义了两个不同的 Loader:

然后在onCreateLoader()你根据 id 做不同的事情:

到目前为止,一切都很好。但是如何在onLoadFinished()中获得正确的光标,因为您没有任何 id 来识别正确的 Cursoradapter 的正确 Cursor。

还是我错了,这是在一个片段中获取两个不同光标适配器的结果的错误方法。

0 投票
1 回答
2505 浏览

android - LoaderManager 的作用域是什么?

使用 Loaders 创建 Android 应用程序时,每个 Activity 和 Fragment 都应该有自己的LoaderManager吗?还是应该只有一个LoaderManager应用程序拥有?最后,用于识别特定LoaderManagers 的“唯一 ID”在类之外是否可见?

具体来说,我在决定我的应用程序中的哪些类应该实现这些LoaderCallback<Cursor>方法时遇到了麻烦(即每个片段是否应该实现这些回调,或者我应该让一个片段实现回调并查询结果,并根据需要将它们发送到其他片段/活动) ?

提前感谢任何可以帮助我的人!我在网上找不到太多关于这个的信息。

0 投票
6 回答
6210 浏览

android - loader 在 Android 中比 Asynctask 有什么优势?

Loaders 与 Async 任务相比有什么优势吗?此外,如何使装载机与 Android froyo 的手机兼容。

编辑:

这里的主要问题是我没有使用本机 DB(SqlLite)。在开发服务器上使用数据库。显然,我不能再使用CursorLoader了。AsyncTaskLoader根本没有例子。如果有,请做链接。

将所需的数据加载到本地数据库然后使用查询它是一个更好的主意CursorLoader吗?

0 投票
1 回答
3565 浏览

java - 用 SimpleAdapterCursor swapCursor() 交换光标

我在我的应用程序中设置了一个内容提供程序并使用 LoaderManager 加载数据,但是我在将光标交换到光标适配器时遇到了麻烦,我测试了光标是否正在返回数据并且它正在返回!追踪问题,似乎ad.swapCursor(cursor);是问题所在。

你认为我在这里做错了什么?它可能是内容提供者吗?

谢谢

0 投票
1 回答
504 浏览

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

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

我使用Loaderswith LoaderManager

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

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

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

我真正想要的是:

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

0 投票
2 回答
541 浏览

android - Android 结合 ImageDownload 和 CursorLoader

我正在使用带有 ImageDownloader 的非常简单的 CursorLoader。ImageDownloader 正在运行,除了 CursorLoader 之外的所有内容都完成了,然后 ImageDownloader 开始下载图像,但 GridView 没有使用下载的图像进行更新。

在我的 ListFragment 中,我有以下onActivityCreated方法:

我的 CursorLoader 如下:

检索所有照片的标记为# STEP 1的行只是检索光标的方法,如下所示:

因此,这是 ListFragment 的 CursorLoader,当返回该 Cursor 时,它假定它是完整的,这是正确的。据我了解,setAdapter()方法实际上会触发getView方法。

我遇到的麻烦是一切似乎都运行良好,我的日志输出正在正确输出图像的 url,断点都显示合法数据,但问题是我的网格视图永远不会用图像更新ImageDownloader 检索。

编辑 这是SimpleCursorLoader我正在使用的:https ://gist.github.com/1217628

0 投票
3 回答
8025 浏览

android - 带有 ActionbarSherlock 的 Android TabsAdapter

我将ActionbarSherlock与实现LoaderManager.LoaderCallbacks的SherlockListFragment一起使用。

在我正在使用的 ApplicationActivity onCreate 方法中

设置布局——效果很好。

我正在像这样初始化操作栏

在 ApplicationActivity 中,我有一个 AsyncTask,它在初始打开时需要几秒钟的时间来加载,并且在针对 API 手动刷新时 - 这意味着我需要确保在上面实例化的片段上更新 ListView,我在onPostExecute 方法,我是这样做的:

这一切都有效

现在,我想放入一个 TabsAdapter 来获得我已经完成的花哨的滑动选项卡,并且它可以工作,但是我提到的关于 onPostExecute 的最后一部分,不起作用:(

这是我的 TabsAdapter:

这是我从 ApplicationActivity 更新的 onCreate 方法

这是我在 ApplicationActivity 中对 onPostExecute 方法所做的更新

基本上,当它尝试运行我的 onPostExecute 代码时

我从片段中的 cursorAdapter 获得 NullPointerException .. 但它找到了片段..

在此处输入图像描述

编辑——请求的代码

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