问题标签 [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.
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()
的加载程序至少开始加载,但这意味着您无法正确处理旋转:(
android - Honeycomb Loaders 可以解决 AsyncTask + UI 更新的问题吗?
在后台做一些事情然后更新 UI 很难在 Android 中正确实现。它只是设计得很糟糕。典型示例是从 Web 获取内容并显示结果的 AsyncTask。这有两个问题:
AsyncTask 有一个对 Activity 的引用(因为它需要更新它的 UI)。屏幕方向更改后,Activity 会重新启动。但是 AsyncTask 仍然引用旧的销毁 Activity,因此它不能更新新 Activity 的 UI。
这可能导致 OutOfMemoryException。想象一下,你有一个包含很多位图的 Activity 并启动了一些 AsyncTask。您按 BACK(活动已完成)但 AsyncTask 仍在运行,因为它引用了 Activity,所以带有位图的 Activity 仍在内存中。重复此操作(启动 Activity 和 BACK),您迟早会强制关闭。
这个可以解决,但是太复杂了。在一个 Activity 中,我有 3 个不同的 AsyncTask,它们中的每一个都可以同时在多个实例中运行。正确实施这一点令人沮丧。代码变得非常难以理解和调试。
蜂窝装载机能以某种方式解决这个问题吗?有没有办法在 Honeycomb 之前的 Android 版本中使用它们?
android - 具有多个加载器的 LoaderManager:如何获得正确的光标加载器
对我来说,如果您有多个加载器,则不清楚如何获得正确的光标。假设您定义了两个不同的 Loader:
然后在onCreateLoader()你根据 id 做不同的事情:
到目前为止,一切都很好。但是如何在onLoadFinished()中获得正确的光标,因为您没有任何 id 来识别正确的 Cursoradapter 的正确 Cursor。
还是我错了,这是在一个片段中获取两个不同光标适配器的结果的错误方法。
android - LoaderManager 的作用域是什么?
使用 Loaders 创建 Android 应用程序时,每个 Activity 和 Fragment 都应该有自己的LoaderManager
吗?还是应该只有一个LoaderManager
应用程序拥有?最后,用于识别特定LoaderManager
s 的“唯一 ID”在类之外是否可见?
具体来说,我在决定我的应用程序中的哪些类应该实现这些LoaderCallback<Cursor>
方法时遇到了麻烦(即每个片段是否应该实现这些回调,或者我应该让一个片段实现回调并查询结果,并根据需要将它们发送到其他片段/活动) ?
提前感谢任何可以帮助我的人!我在网上找不到太多关于这个的信息。
android - loader 在 Android 中比 Asynctask 有什么优势?
Loaders 与 Async 任务相比有什么优势吗?此外,如何使装载机与 Android froyo 的手机兼容。
编辑:
这里的主要问题是我没有使用本机 DB(SqlLite)。在开发服务器上使用数据库。显然,我不能再使用CursorLoader
了。AsyncTaskLoader
根本没有例子。如果有,请做链接。
将所需的数据加载到本地数据库然后使用查询它是一个更好的主意CursorLoader
吗?
java - 用 SimpleAdapterCursor swapCursor() 交换光标
我在我的应用程序中设置了一个内容提供程序并使用 LoaderManager 加载数据,但是我在将光标交换到光标适配器时遇到了麻烦,我测试了光标是否正在返回数据并且它正在返回!追踪问题,似乎ad.swapCursor(cursor);
是问题所在。
你认为我在这里做错了什么?它可能是内容提供者吗?
谢谢
android - LoaderManager 离线获取数据,然后在线
我想遵循这个很好的可用性模式,应用程序离线存储数据以获得更快的响应,并在它在线获取新数据时更新它。
我使用Loaders
with LoaderManager
。
现在,实施上述方法的正确方法是什么Loaders
?
目前我使用两种方法,它们都有缺点,而且通常不是很优雅。
- 将数据存储在应用程序上下文中,而不是 SQLite
- 两个单独的
AsyncTaskLoaders
-offlineLoader
和onlineLoader
。第一个从 SQLite 数据库中获取数据并立即显示它,如果它在那里,第二个从外部服务器加载数据,将其写入数据库(用于 offlineLoader)并替换离线数据
我真正想要的是:
一个加载器,它离线获取数据并将其返回给 LoaderManager,但之后继续工作并在准备好时返回新的在线数据。所以它应该返回两次 - 甚至可能吗?
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
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 .. 但它找到了片段..
编辑——请求的代码
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