2

我正在使用LoaderContent 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;

}   

谢谢你

4

0 回答 0