我正在尝试使用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
对象。
我没有得到的是因为CustomCursorLoader
与CursorLoader
和ShirtsCursorLoader
扩展CustomCursorLoader
的类型相同,那么为什么类型不兼容?