1

我正在使用 SQLite 数据库并希望在不使用ContentProvider.

我无法让我的子类 SimpleCursorLoader(取自没有 ContentProvider 的 CursorLoader 使用)与LoaderManager.

在覆盖方法中

@Override
public Loader<Cursor> onCreateLoader(int ID, Bundle args) {
    return new ListCursorLoader(this, dBHelper);

}

我得到一个类型不匹配,说它不能从ListCursorLoaderto转换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()方法,我根本看不到我做错了什么。

希望大家能帮忙!

4

1 回答 1

7

我刚试过你的代码,它没有问题。

你应该仔细检查你的进口。您链接到的 SimpleCursorLoader 正在使用支持库。您没有提供代码,但我认为您可能使用的是默认 LoaderManager,而不是support library 提供的那个

因此,为了能够使用此类,您需要在 Fragment中引用android.support.v4.content.Loader并加载它。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);
    }

...

}
于 2013-01-08T04:35:43.907 回答