我想知道如何使用它CursorLoader来填充屏幕上的小部件.在线的所有示例仅用于使用适配器,这非常有用.我需要的是一种可靠的方法来从Cursor和UI线程更新我的屏幕中的视图,而不会因为StaleDataException或者光标被突然停用而崩溃.这是我目前的方法,但我仍然收到用户的一些崩溃报告.
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
CursorLoader loader = null;
switch (id) {
case LOADER_ID_DATA:
loader = new CursorLoader(...);
break;
}
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, final Cursor cursor) {
handler.post(new Runnable() {
@Override
public void run() {
if (getActivity() == null)
return;
updateView(cursor);
}
});
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案是直接在onLoadFinished中检索所有光标字段,并将它们全部传递给处理程序以填充UI线程上的窗口小部件.但这很难看,因为我可能在光标中有很多值.我很想找到一种可靠的无碰撞方式来处理这一切.
我正在编写一个应用程序,允许人们为他们需要做的各种任务设置警报.我目前的计划是将所有相关数据存储到SQLite数据库中.为此,我创建了一个扩展SQLiteOpenHelper的类,并使用方法填充它以处理我期望必须接受的所有CRUD.知道在一个线程上执行所有处理通常是个坏主意,查找了在线程之间分离工作的方法,并找到了CursorLoader和LoaderManager,这看起来很理想,因为它们在Android兼容性库中可用.但是,LoaderManager似乎需要ContentProvider 按照文档中的教程进行操作,而我还没有真正看到需要对ContentProviders做任何事情,因为我没有计划允许其他应用程序访问数据.没有ContentProvider,我不知道我应该如何为我的数据库提供一个Uri来提供给CursorLoader.有没有办法让我继续使用我的类扩展SQLiteOpenHelper并仍然实现LoaderManager,以允许我将所有填充的ListFragments与我的光标关闭UI线程?
sqlite android sqliteopenhelper android-loadermanager android-cursorloader
好日子,正如标题所说,任何人都知道如何在片段中从CursorLoader加载数据时实现进度对话框.在这方面找不到任何例子.任何有关如何操作的链接或指南将受到高度赞赏.谢谢
android android-fragments android-dialog android-cursorloader
我目前正在做一个项目,涉及根据我当前的位置显示附近的位置列表.
我不久前刚开始使用Android编程,所以在编码阶段我还在学习.
我搜索了所有试图得到一些关于如何继续的线索.阅读和尝试后我仍然被困住了.
我的工作代码目前包括
问题
过滤ListView条目的"正确"方法是什么?我在Filter/Filterable界面上看过帖子,但它似乎不适用于我当前的设置?我是否在Custom CursorAdapter中执行过滤?
执行过滤后,如何刷新ListView?我是否调用getLoaderManager().restartLoader(0,null,this)或adapter.notifyDataSetChanged()?
提前致谢.
android android-listview android-loadermanager android-cursorloader android-cursoradapter
我正在更新Android 2.2应用程序以使用CursorLoader(使用v4兼容性库),我正在试图理解onLoadFinished当内容提供程序通知与CursorLoader查询关联的内容发生更改时未调用该方法的原因.
CursorLoader正在查询客户内容提供商.我的提供程序在其查询方法中设置通知URI:
cursor.setNotificationUri(getContext().getContentResolver(), uri);
Run Code Online (Sandbox Code Playgroud)
并通知其插入/更新/删除方法的更改:
getContext().getContentResolver().notifyChange(uri, null);
Run Code Online (Sandbox Code Playgroud)
我已经检查过两种情况下URI是否相同.以前我使用的是同一内容提供商的ManagedQuery,并且查询的内容更新得很好,这让我觉得内容提供商可能还可以.
我看过LoaderCursorSupport示例,有趣的是,当我在Nexus One上运行它时,我看不到它反映了我对联系人名称所做的更改(在示例应用程序和联系人应用程序之间切换).应该是?如果是这样,是否存在一些我不知道的潜在问题?
我要么我的语法不正确,要么我还没有理解Loaders如何工作,但我现在有一个ListView显示我的数据库中的所有项目.该活动有一个按钮,显示今天的日期.用户可以单击此按钮以显示日期对话框,或者可以按上一个/上一个按钮更改显示的日期.我想根据显示的日期过滤ListView,因此只显示保存日期的记录.
目前所有记录都显示
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cl = new CursorLoader(this, DBProvider.CONTENT_URI,
null, null, null, null);
return cl;
}
Run Code Online (Sandbox Code Playgroud)
我根据我在网上看到的内容尝试了一些变化,但实质上我试图包含一个'选择',将今天的日期显示为一个字符串(它已经通过SimpleDateFormatter并设置为按钮上的文本).
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] selectDate = { btn_logbook_date.getText().toString() };
CursorLoader cl = new CursorLoader(this, DBProvider.CONTENT_URI,
null, "Date=?", selectDate , null);
return cl;
}
Run Code Online (Sandbox Code Playgroud)
和
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String selectDate = btn_logbook_date.getText().toString();
String selection = "(" + AddDBHelper.KEY_DATE + "=" + selectDate + ")";
CursorLoader cl = new CursorLoader(this, DBProvider.CONTENT_URI, …Run Code Online (Sandbox Code Playgroud) 我是Android的新手,我正试图让我的标题围绕SimpleCursorAdapter和CursorLoader类.根据我的理解,我见过的所有示例都使用这两个类将数据加载到ListView后台线程中(不阻止UI).
我对此很好,并且已经将这种通用方法与我自己的项目列表一起使用,但是我现在希望能够单击列表中的项目并获取项目的完整信息.通常的做法是使用SimpleCursorAdapter和CursorLoader检索单个项目的详细信息吗?或者它们只是用于列表?
谢谢.
android android-contentprovider android-listview android-cursorloader android-cursoradapter
我在我的App中使用CursorLoader进行数据库事务.
我的应用程序也有调用startManagingCursor()的方法,该方法已被弃用.
我只是想替换这个方法调用,所以我该怎么做?
我正在使用CursorLoder类从android的媒体内容提供者获取Genre列表.下面是我的光标查询来获取类型列表.
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// currently filtering.
Uri baseUri;
baseUri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
String[] STAR = { "*" };
return new CursorLoader(getActivity(), baseUri, STAR, null, null, null );
}
Run Code Online (Sandbox Code Playgroud)
现在,我从媒体内容提供商处获得了所有类型列表,但是我得到的数据存在问题.我也得到了之前创建的流派名称,但现在我没有歌曲.
我只想要有歌曲的流派,而不是没有歌曲的流派名称.
任何人都可以帮助我吗?
UPDATE
我可以使用下面的代码获取所有类型及其歌曲...
private void getGenresList() {
//-------------------------------------
int index;
long genreId;
int count;
Uri uri;
Cursor genrecursor;
Cursor tempcursor;
String[] proj1 = {MediaStore.Audio.Genres.NAME, MediaStore.Audio.Genres._ID};
String[] proj2={MediaStore.Audio.Media.DISPLAY_NAME};
genrecursor=getActivity().getContentResolver().query(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI,proj1,null, null, null);
if(genrecursor.moveToFirst())
{
do{
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres.NAME);
System.out.println("GENRE NAME: "+genrecursor.getString(index));
System.out.println("======================================");
index = genrecursor.getColumnIndexOrThrow(MediaStore.Audio.Genres._ID);
genreId=Long.parseLong(genrecursor.getString(index));
uri = …Run Code Online (Sandbox Code Playgroud) android android-contentprovider simplecursoradapter android-cursorloader
在活动A中,我正在加载一个包含我表中所有值的列表,并设置了一个setOnItemClickListener来启动活动B并通过发送数据发送带有所选项的id [ 1 ] 的uri
[ 1 ]
Uri currentTestUri = ContentUris.withAppendedId(TestEntry.CONTENT_URI, id);
在活动B中,我的onCreateLoader包含投影:
String[] projection = {
TestEntry._ID,
TestEntry.COLUMN_TEST_ONE,
TestEntry.COLUMN_TEST_TWO}
Run Code Online (Sandbox Code Playgroud)
...带有return语句
return new CursorLoader(this,
mCurrentTestUri, //Got this from Activity A
projection,
null,
null,
null);
Run Code Online (Sandbox Code Playgroud)
我的onLoadFinished看起来像这样:
if (cursor.moveToFirst()) {
int oneColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_ONE);
int twoColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_TWO);
String currentOne = cursor.getString(oneColumnIndex);
String currentTwo = cursor.getString(twoColumnIndex);
textViewOne.setText(currentOne);
textViewTwo.setText(currentTwo);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,现在我希望显示下一行(右下方)的值,但是使用不同的投影(我只需要_ID和COLUMN_TEST_ONE)并且onLoadFinished显示COLUMN_TEST_ONE的值textViewThree.
[两行的值应该同时显示,而不是一个或另一个]
我可以使用[ …
sqlite android android-cursorloader android-loader android-sqlite