Ошибка SimpleCursorLoader onCreateLoader, несоответствие возвращаемого типа
Я использую базу данных SQLite и хочу загрузить ее без использования ContentProvider
,
У меня возникают проблемы при получении моего SimpleCursorLoader с подклассами (взятый из использования CursorLoader без ContentProvider) для работы с LoaderManager
,
В перезаписанном методе
@Override
public Loader<Cursor> onCreateLoader(int ID, Bundle args) {
return new ListCursorLoader(this, dBHelper);
}
Я получаю несоответствие типов, говоря, что он не может конвертировать из ListCursorLoader
в Loader<Cursor>
, Я пытался создать ListCursorLoader
на лету (то есть в методе), но это тоже не работает.
Вот код для моего ListCursorLoader
:
package utilities;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
public class ListCursorLoader extends SimpleCursorLoader {
private DBAdapter dBAdapter;
public ListCursorLoader(Context context, DBAdapter adapter) {
super(context);
dBAdapter = adapter;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = null;
dBAdapter.open();
try {
cursor = dBAdapter.getAllQueries();
} catch (SQLException e) {
e.printStackTrace();
}
if (cursor != null) {
cursor.getCount();
}
return cursor;
}
}
Как видите, я только перезаписал loadInBackground()
метод, и я просто не вижу, что я делаю неправильно.
Надеюсь, вы, ребята, можете помочь!
1 ответ
Я только что попробовал ваш код, и он работал без проблем.
Вы должны перепроверить ваш импорт. SimpleCursorLoader, на который вы ссылаетесь, использует библиотеку поддержки. Вы не предоставили код, но я думаю, что вы можете использовать LoaderManager по умолчанию, а не тот, который предоставляется библиотекой поддержки.
Так что для того, чтобы вы могли использовать этот класс, вам нужно ссылаться android.support.v4.content.Loader
и загрузить его с помощью SupportLoaderManager
в вашем фрагменте.
Вот код из моего фрагмента, который работал: (Обратите внимание на использование библиотеки поддержки.)
import android.database.Cursor;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
...
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.getSupportLoaderManager().initLoader(0, null, this);
}
...
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new ListCursorLoader(this);
}
...
}