慢慢打电话给LoadFinished

时间:2013-04-16 16:39:36

标签: android android-contentprovider android-sqlite android-loader

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

}   

谢谢

0 个答案:

没有答案