我正在使用SQLite数据库并希望在不使用ContentProvider
的情况下加载它。
我无法将我的子类SimpleCursorLoader(取自CursorLoader usage without 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()
方法,而我根本无法看到我做错了什么。
希望你们能帮忙!
答案 0 :(得分:6)
我刚试过你的代码,但它没有问题。
你应该仔细检查你的进口。您链接到的SimpleCursorLoader使用support library。您没有提供代码,但我认为您可能正在使用默认的LoaderManager,而不是provided by the support library。
因此,为了能够使用此课程,您需要引用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);
}
...
}