android - 无法从 SQLiteCursorLoader 转换为 Loader<Cursor>

标签 android android-fragments actionbarsherlock android-cursorloader commonsware-cwac

我正在使用基于 ActionBarSherlock 的 Activity 和 fragment 。要从 SQLite 数据库中读取行,我尝试使用 Loader 而不是 ContentProvider,并且我正在尝试获取 LoaderEx为我工作。

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

"Cannot convert from SQLiteCursorLoader to Loader<Cursor>"

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

ABS 和 LoaderEx 都添加为库项目。

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

这些是我的 fragment 的导入:

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;

这是我的 fragment 声明:

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 框架的 native API 级别 11+ 版本的。如 the LoaderEx documentation 中所述,如果您使用来自 Android 支持包的 Loader backport,则您应该使用 com.commonsware.cwac.loaderex.acl.SQLiteCursorLoader

关于android - 无法从 SQLiteCursorLoader 转换为 Loader<Cursor>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17428914/

相关文章:

android - Xamarin.forms 如何更改导航栏颜色

android - Retrofit 2 + RxJava 取消/取消订阅

java - 项目上的抽屉导航点击仍保留在主页 fragment 上

android - ActionBarSherlock 中的 PopupMenu 等价物

android - 没有符合条件的设备可以安装应用。 |安卓|奥利奥 8.1.0

android - 如何使 Bottom Sheet (BottomSheetBehavior)可扩展到任意位置?

android - fragment 中的 MapFragment 与 Google Maps api v2 fragment 中的 MapView

android - 如何收听 Google Wallet/Android Pay Fragment 中的更改按钮?

android - 从 SherlockFragment 获取资源

java - 中间进度不适用于在 Gingerbread 上运行的 ActionBarSherlock