1

我正在使用基于 ActionBarSherlock 的活动和片段。要从 SQLite 数据库中读取行,我正在尝试使用 aLoader而不是 a ContentProvider,并且我正在尝试让LoaderEx为我工作。

我遇到了一个顽固的问题:在我的片段onCreateLoader回调中,ADT 一直给我一个错误:

"Cannot convert from SQLiteCursorLoader to Loader<Cursor>"

我正在使用 Android v4 支持库。由于 DEX 错误,我已从android-support-v4.jarActionBarSherlock 和 LoaderEx 中删除,并将其添加到我的基础项目中。然后我让 ABS 和 LoaderEx 都依赖于此。

ABS 和 LoaderEx 都作为库项目添加。

我已经检查过我只使用 v4 导入。LoaderExDemo 也可以在模拟器中编译和工作。

这些是我的片段的导入:

import com.actionbarsherlock.app.SherlockListFragment;

import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;

import com.commonsware.cwac.loaderex.SQLiteCursorLoader;

这是我的片段声明:

public class MeetingListFragment 
        extends SherlockListFragment 
        implements LoaderManager.LoaderCallbacks<Cursor> {
    private JournalDatabaseHelper db = null;
    private SimpleCursorAdapter adapter = null;
    private SQLiteCursorLoader loader = null;

这是getLoader回调方法:

public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
    loader = new SQLiteCursorLoader(getSherlockActivity().getApplicationContext(), 
        db, 
        "SELECT _ID, meeting_timestamp, meeting_desc FROM meeting " +
        "ORDER BY meeting_timestamp DESC",
        null);
    return loader;  // <<< this is the line of the ADT/Eclipse error
}

我已经为此来回走了几个小时。关于 SO 的一些答案在该领域是一种,但没有真正的解决方案。出了什么问题?

4

1 回答 1

5

你有:

import com.commonsware.cwac.loaderex.SQLiteCursorLoader;

这是错误的,因为这是框架SQLiteCursorLoader的原生 API Level 11+ 版本。LoaderLoaderEx 文档中所述com.commonsware.cwac.loaderex.acl.SQLiteCursorLoader,如果您使用的Loader是 Android 支持包中的反向移植,则应该使用。

于 2013-07-02T15:03:56.970 回答