这个问题将是来自问Content Resolver vs Cursor Loader的问题的后续问题 答案清楚地说明了如何使用内容解析器将记录插入sqlite Db。我的问题如下:
例如:
public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
switch (id) {
case AppConstants.LOADER_ADD_FAV_PHONE_NUM:
ContentValues values = new ContentValues();
values.put(DBHelper.TM_DB_COLUMN_PHONE_NUMBER,
directionOrder);
values.put(TransitMeDBHelper.TM_DB_COLUMN_NAME_ID, selectionArgs[0]);
Uri insertFavStop =getContentResolver().insert(TransitMeContentProvider.CONTENT_URI_INSERT_FAV_PHONE,
values);
break;
}
return null;
}
这会运行主UI线程或工作线程中的功能吗?我知道我不会收到回调,因为内容解析器将返回URI而不是包含数据的游标。
我尝试运行此代码,但它表现得有点奇怪..重复插入被记录并且不是很有意义,有人可以向我展示一些使用Loader进行插入操作的正确资源(我已经看过许多带有查询示例的示例它就像一个魅力:))
感谢您的时间。
答案 0 :(得分:5)
我可以使用加载程序(Normal Loader)来实现此功能吗?
您不能使用默认CursorLoader
来插入数据。如果您实现自己的Loader
,那么可能使用loadInBackground
方法进行插入,但这会使您的代码充其量尴尬(我不知道是否实际上会工作。)
这会运行主UI线程或工作程序中的功能吗? 线程。据我所知,我不会收到回调 内容解析器将返回URI而不是光标 包含数据。
加载器回调将在它们实现的线程上运行(最有可能是UI主线程),因此你在主UI线程上执行getContentResolver().insert()
,可能会阻塞主UI线程。 / p>
我尝试运行此代码,但它表现得有点奇怪..重复 插入记录并且不是常数,
您是否测试过调用onCreateLoader
方法的次数?
有人可以向我展示一些使用Loader做的正确资源 插入操作(我已经看过很多带有查询示例的例子 它就像一个魅力:))
请勿使用/尝试使用Loader
在ContentProvider
/数据库中插入数据。它就像查询的魅力一样,因为加载器被设计为从数据源加载数据(而不是插入数据),这就是它们的目的。如果要插入数据,请使用AsyncTask
(也请查看AsyncQueryhandler
),常规线程。