Android OnLoadFinished被无限调用
昨天,我尝试编写我的内容提供者并对其进行测试。不幸的是,这段代码:Android OnLoadFinished被无限调用,android,android-contentprovider,loader,Android,Android Contentprovider,Loader,昨天,我尝试编写我的内容提供者并对其进行测试。不幸的是,这段代码: if(loader.getId() == 1) getContentResolver().insert(Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"), values); 做某事,因为onLoadFinished被称为无限。有人知道发生了什么事吗?当我删除它时,onLoadFinished只调用一次。 何时调用on
if(loader.getId() == 1)
getContentResolver().insert(Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"), values);
做某事,因为onLoadFinished被称为无限。有人知道发生了什么事吗?当我删除它时,onLoadFinished只调用一次。
何时调用onLoaderReset?有人能给我一个真实的例子来测试它吗?
提前谢谢
Thas是加载程序的所有代码:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
loader = new CursorLoader(this, Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"),
null, null, null, null);
Log.d("Some looong data", "Create");
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
ContentValues values = new ContentValues();
values.put("user", "s");
if(loader.getId() == 1) getContentResolver().insert(Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"), values);
Log.d("Some looong data", "Finish");
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
Toast.makeText(this, "RESET", Toast.LENGTH_SHORT).show();
}
我只是尝试了一下,我不知道为什么onLoadFinished被称为无限次。根据
加载程序将监视数据的更改,并将其报告给
您可以通过这里的新电话。(here=onLoadFinished方法)您不应该自己监控数据。
例如,如果数据是光标,而您将其放置在
CursorAdapter,使用CursorAdapter(android.content.Context,
android.database.Cursor,int)构造函数,而不传入
标记\自动\重新查询或标记\寄存器\内容\观察者(即,使用0
对于flags参数)。这将防止游标适配器执行以下操作:
它自己观察光标,这是不需要的,因为
如果发生变化,您将得到一个新的光标,并在此处抛出另一个调用
话虽如此,当你打电话的时候
if(loader.getId() == 1) getContentResolver().insert(Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"), values);
在
onLoadFinished
中,您再次触发了onLoadFinished
方法,创建了一个无限循环。不完整的代码对您没有帮助好的,我为加载程序添加了所有代码。非常感谢!这就解释了发生了什么!在实际情况下何时调用onLoaderReset?实际上,我对加载器很感兴趣,因为在我读到之前的某个地方,当你有后台线程(这与异步任务不一致)时,加载器可以管理旋转屏幕的情况,即加载器不会改变旧活动的视图,但你能解释一下如何实现吗?我知道异步任务可能会导致内存泄漏或视图更改,但这已经不存在了,但加载程序如何证明这一点?@DPM这是一个非常好的问题,解释它需要一些时间和精力。我建议你提出新的问题来解决这个问题。祝你好运,快乐编码:-)非常感谢!我很快就会做到的!
if(loader.getId() == 1) getContentResolver().insert(Uri.parse("content://com.example.djak.contentprovidertest.provider/cte"), values);