我正在使用 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()
方法,我根本看不出我做错了什么。
希望大家帮帮忙!
最佳答案
我刚刚尝试了您的代码,它没有问题。
您应该仔细检查您的导入。您链接到的 SimpleCursorLoader 正在使用 support library .您没有提供代码,但我认为您可能正在使用默认的 LoaderManager,而不是 provided by the support library。 .
因此,为了能够使用此类,您需要引用 android.support.v4.content.Loader
并使用 fragment 中的 SupportLoaderManager
加载它。
这是我的 fragment 中有效的代码: (注意支持库的使用。)
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);
}
...
}
关于android - SimpleCursorLoader onCreateLoader 错误,返回类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206245/