自定义Cursor Loader与SQLite数据库一起使用

时间:2015-05-21 20:42:01

标签: java android android-asynctask android-cursorloader

我正在尝试使用CursorLoader的自定义实现将其与SQLite数据库一起使用。我引用了这个链接(https://gist.github.com/casidiablo/1217628)来实现。

public abstract class SimpleCursorLoader extends AsyncTaskLoader<Cursor> {
    private Cursor mCursor;

    public SimpleCursorLoader(Context context) {
        super(context);
    }

    @Override
    public abstract Cursor loadInBackground();
    ... 
    ...
}

现在在我的片段中,我创建了另一个类ShirtsCursorLoader),它扩展了SimpleCursorLoader并定义了loadInBackground()方法。

public static final class ShirtsCursorLoader extends SimpleCursorLoader {
    Context context;

    public ShirtsCursorLoader(Context context) {
        super(context);
    }

    @Override
    public Cursor loadInBackground() {
        DBHelper dbHelper = new DBHelper(context.getApplicationContext());
        Cursor cursor = dbHelper.getAllShirts();
        return cursor;
    }
}

现在在同一片段中,我还实现了LoaderCallbacks<Cursor>接口,当我尝试实现onCreateLoader()函数(返回Loader<Cursor>类型)时,我遇到类型不兼容的错误。

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        ShirtsCursorLoader loader = new ShirtsCursorLoader(getActivity());
        return loader;   // this line gives a type incompatible error
    else
        return null;
}

我在这里做错了什么?它抱怨类型不兼容,因为它需要返回Loader<Cursor>对象,但我返回一个ShirtsCursorLoader对象。

我没有得到的是因为CustomCursorLoaderCursorLoaderShirtsCursorLoader扩展CustomCursorLoader的类型相同,那么为什么类型不兼容?

0 个答案:

没有答案