android - SimpleCursorLoader onCreateLoader 错误,返回类型不匹配

标签 android sqlite cursor loader mismatch

我正在使用 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/

相关文章:

plsql - PL/SQL 在游标中引用另一个游标?

java - 控制台上的光标似乎很滞后

java - 了解 StAX 的 Cursor API 和 Iterator API 之间的区别

android - 在 Android 中查看星期几

android - 采摘图像总是给出风景图像

android - 自定义 ItemDecoration 未绘制在 RecyclerView 的最后一个 View 上

android - 要从 android SQlite 数据库中的表中删除所有记录?

sql - 获取sqlite中的百分比

android - 如何清除/重置 Android 中的 ItemizedOverlay?

sqlite - Android 中存在数据库问题的应用程序类