我正在使用一个活动和一个基于ActionBarSherlock的片段。为了从SQLite数据库读取行,我试图使用Loader而不是ContentProvider,并且试图让LoaderEx为我工作。

我遇到了一个棘手的问题:在片段的onCreateLoader回调中,ADT始终给我一个错误:

"Cannot convert from SQLiteCursorLoader to Loader<Cursor>"


我正在使用Android v4支持库。由于DEX错误,我从ActionBarSherlock和LoaderEx中都删除了android-support-v4.jar,并将其添加到我的基础项目中。然后,我使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的一些答案属于该领域,但没有真正的解决方案。怎么了?

最佳答案

你有:

import com.commonsware.cwac.loaderex.SQLiteCursorLoader;


这是错误的SQLiteCursorLoader,因为这是Loader框架的本机API Level 11+版本的版本。如the LoaderEx documentation中所述,如果您使用的是Android支持程序包中的com.commonsware.cwac.loaderex.acl.SQLiteCursorLoader反向端口,则应使用Loader

08-18 13:19