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

时间:2013-01-08 00:05:28

标签: 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()方法,而我根本无法看到我做错了什么。

希望你们能帮忙!

1 个答案:

答案 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);
    }

...

}