问题标签 [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 回答
2611 浏览

android - Android:CursorLoader 在非最顶层 Fragment 上崩溃

我有一些使用 CursorLoader 检索其内容的 ListFragment。当用户向下钻取内容时,一个 Fragment 会替换另一个 Fragment(Activity 保持不变)。但是如果内容在非最顶层的 Fragment 上发生变化,应用程序就会崩溃:

当后台更新更改内容时,或者当用户从主屏幕返回并且另一个 Fragment 位于返回堆栈的顶部时,可能会发生这种情况。onLoadFinished处理程序尝试更新不再存在的 UI 。但是为什么片段仍然得到游标更新呢?

如果片段不可见,我已经通过中止更新来解决它,但这似乎是错误的做法。

这是我的 Fragment 的样子,为简洁起见稍作编辑:

isVisible()检查可以防止崩溃,但它不在我见过的任何示例代码中。这里有什么问题?


编辑:果然,我用一个旧视图试图使用一个封闭的游标结束了一个 StaleDataException。所以现在我在视图被销毁时销毁 LoaderManager。仍然不确定这是否是正确的做法,并且我无法重现 StaleDataException。

isVisible()从上面删除了黑客并添加了这个:

0 投票
4 回答
25589 浏览

android - android 兼容性包 - 片段...未附加到 Activity


您好,我面临这个问题:我正在使用兼容性包在 android 应用程序中使用片段(最小 SDK 2.1)。

有时会在片段上发生随机异常,我不知道为什么。这是我收到的堆栈跟踪:

这是我在 Fragment 类中调用的相应代码:

以下是调用片段的活动代码:

下面是 getLoaderManager() 的片段源代码:

以下是崩溃前应用程序的步骤:

  1. 活动在后台调用方法。
  2. 在活动上调用回调方法
  3. 在这个回调方法中,activity调用了fragment
  4. 片段尝试启动一些需要活动的方法(如 getLoadManager())。
  5. 片段不再附加到活动 => 崩溃

我们尝试了两个修复:

  • 测试活动以检查活动是否完成(如上面的代码)
  • 使用方法 isDetached 对片段进行测试。

谢谢你的帮助!!!

如果我不清楚,请随时向我询问更多信息。

0 投票
2 回答
49668 浏览

java - 为 SQLiteDatabase 使用单例设计模式

我是 Android 的新手,我正在开发一个简单的应用程序以获得一些基本经验。我的应用程序非常简单,其中包括广播接收器和一些活动。两个组件都使用单个数据库,因此理论上可能会发生两者都尝试同时访问数据库的情况。

目前,我只是在每次需要时实例化 db 对象(这是一个 SQLite db 帮助器类),并执行所需的操作:查询、插入等。

从我在这里和其他一些文档中阅读的内容来看,如果同时访问数据库,则会出现“数据库锁定”异常的问题,因此更好的方法是拥有这个数据库对象的单个实例,所以所有组件始终使用相同的数据库连接。

上述推理是否正确?那么单身人士会是一个足够好的解决方案吗?我知道一些纯粹主义者可能会反对它,但请注意,这是一个相当简单的应用程序,因此我可以负担得起在其他情况下不会做的事情。

否则,更好的选择是什么?我已经阅读了有关使用内容提供程序的信息,但这样做太多了,此外我对与其他活动共享数据不感兴趣。我确实读过这篇文章,发现它很有帮助。

0 投票
1 回答
7368 浏览

android - 为什么 Cursor.requery() 标记为“已弃用”?

Cursor.requery() 是一种非常常用的方法,用于刷新 ListView 的内容。但是为什么这种方法被标记为“已弃用”?我无法非常清楚地理解 API 文档中的原因。

Cursor.requery() API:http: //developer.android.com/reference/android/database/Cursor.html#requery ()

谁能进一步解释原因?谢谢:)

0 投票
4 回答
51285 浏览

android - AsyncTaskLoader 与 AsyncTask

由于Honeycombv4 Compatibility Library可以使用AsyncTaskLoader. 据我了解,AsyncTaskLoader可以通过屏幕翻转等配置更改生存。

是否建议使用AsyncTaskLoader代替AsyncTask?也进图吗LoaderManager

但是我还没有找到任何关于如何正确使用AsyncTaskLoader. 文档也没有提供示例。谁能提供一些很好的例子。

0 投票
2 回答
5322 浏览

android - 自定义 AsyncTaskLoader 回调的问题

我的 AsyncTaskLoader 有几个问题,不确定它们是否相关,因为它们都在尝试重新启动 Loader 时发生。在我的应用程序中,我有 3 个自定义 CursorAdapter 实例,由 3 个由 1 个单例 LoaderManager 管理的自定义 AsyncTaskLoader 实例支持。这些问题与两个不同的适配器/加载器对有关,但在每种情况下使用的代码都是相同的:

问题 1:我调用了 restartLoader() 并且 LoaderManager 注册了对 onCreateLoader 的调用,但没有注册对 onLoaderReset() 的调用。Loader 到达 DeliverResult(),但永远不会调用 onLoadFinished()。Loader 没有设置“reset”或“started”标志(参见下面的代码)。

问题2:我调用restartLoader() 并且LoaderManager 注册了对onLoaderReset() 的调用。加载程序到达 onReset(),但没有进一步。Cursor 设置为 null,但没有加载新的 Cursor。

任何想法可能是什么问题?下面是 Loader 和 Loader Manager 的一些代码:

CustomCursorLoader.java

CustomCursorLoaderManager.java:

0 投票
2 回答
5948 浏览

android - LoaderManager 是做什么的?

我试图了解它的LoaderManager作用。任何人都可以分享一个例子吗?创建游标时必须使用它们吗?如果不是我应该如何使用?非常感谢一个简单的例子。

0 投票
5 回答
47026 浏览

android - 没有 ContentProvider 的 CursorLoader 使用

Android SDK 文档说该startManagingCursor()方法已弃用:

此方法已弃用。将新的 CursorLoader 类与 LoaderManager 一起使用;这也可以通过 Android 兼容包在旧平台上使用。此方法允许活动根据活动的生命周期为您管理给定游标的生命周期。也就是说,当活动停止时,它会自动在给定的光标上调用 deactivate(),当它稍后重新启动时,它会为你调用 requery()。当活动被销毁时,所有托管游标将自动关闭。如果您的目标是 HONEYCOMB 或更高版本,请考虑改用 LoaderManager,可通过 getLoaderManager() 获得

所以我想用CursorLoader. 但是,当我在构造函数中需要 URI 时,如何使用自定义CursorAdapter和不使用它?ContentProviderCursorLoader

0 投票
2 回答
15820 浏览

android - CursorLoaders 有什么好处?

Cursors在我的应用程序中广泛使用,以加载和偶尔从数据库写入信息。我已经看到 Honeycomb 和 Compatibility Package 具有Loader旨在帮助以“良好”方式加载数据的新类。

从本质上讲,这些新类(尤其是CursorLoader)是否比以前的数据管理方法好很多?例如,CursorLoader过度管理有什么好处?Cursors

我使用 aContentProvider来处理数据,这显然需要,Uris但是这与initLoader()方法有何关系?我必须设置每个Fragments单独使用加载器吗?每个加载器的 id 需要有多独特,它是在我的应用程序的范围内还是只是一个片段?是否有任何简单的方法可以简单地将 a 传递Uri给 CursorLoader 来查询我的数据?

目前我所能看到的是加载器添加了一个不必要的额外步骤来将我的数据导入我的应用程序,所以有人可以更好地向我解释一下吗?

0 投票
5 回答
8840 浏览

android - SimpleCursorAdapter 的旧构造函数已弃用.. 真的吗?

这里它说SimpleCursorAdapter's API level 1 构造函数已被弃用,建议使用LoaderManagerand CursorLoader

但是深入研究LoaderManagerandCursorLoader的使用我发现了这个例子,在一个扩展 a 的内部类中ListFragment(我想是 Fragment 本身的扩展)我们创建了一个CursorLoader. CursorLoader一切似乎都很好,除了将 aUri作为参数的事实。所以这意味着我需要创建一个ContentProvider来访问我的数据库。

ListView我必须承认,为了使用来自数据库的项目创建一个简单的项目,必须经历所有这些看起来有点过头了。特别是如果我不打算将我的数据库数据提供给其他应用程序,而内容提供者的主要目的就是这样做。

那么它真的值得吗?

特别是在像我这样要获取的内容可能很小的情况下。我正在认真考虑用旧方法做,你说呢?