我正在使用Loader
并Content Provider
用我的数据库中的数据填充列表视图。我的问题是,如果我使用下面的行Content Provider
从数据库中获取数据,查询并onLoadFinished
执行得非常快(填充列表视图没有问题):
Cursor c = this.mDb.rawQuery("SELECT * FROM " + DATABASE_TABLE , null);
但是,如果我将行更改为:
Cursor c = this.mDb.rawQuery("SELECT DISTINCT D._id, D.Name, D.Icon FROM Plain A, Test B, Exercise C, Group D WHERE A.ID=1 AND B.PlainID=A._id AND B.TestID=C._id AND C.ExerciseID=D._id", null);
查询继续快速运行,但应用程序需要大约 2 秒来调用onLoadFinished
和填充列表视图。
如果游标已经执行查询,为什么会出现这种延迟?
我的装载机:
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Log.d(TAG, "onCreateLoader");
Uri uri = ContentProviderGroup.CONTENT_URI;
String[] projection = { Group.KEY_ROW_ID, Group.KEY_NAME, Group.KEY_ICON };
CursorLoader cursorLoader = new CursorLoader(this, // Parent activity context
uri, // Table to query
projection, // Projection to return
null, // No selection clause
null, // No selection arguments
null); // Default sort order
Log.d(TAG, "END onCreateLoader");
return cursorLoader;
}
我的内容提供者(查询功能):
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor;
if(uriMatcher.match(uri) == CODE){
Log.d(TAG, "CALL SELECT");
cursor = mCustomerDB.getGroup(selection, selectionArgs);
Log.d(TAG, "END SELECT");
return cursor;
}else{
return null;
}
}
我的 DBAdapter(getGroup 函数):
public Cursor getGroup(String selection, String[] selectionArgs){
Log.d(TAG, "SELECT INIT");
/////// HERE I USE the rawQuery /////////
Log.d(TAG, "SELECT END");
return c;
}
谢谢你