1

SQLite データベースを使用しており、ContentProvider.

サブクラス化された SimpleCursorLoader ( ContentProvider なしの CursorLoader の使用から取得) を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()メソッドを上書きしただけで、何が間違っているのかわかりません。

皆さんが助けてくれることを願っています!

4

1 に答える 1

7

あなたのコードを試したところ、問題なく動作しました。

インポートを再確認する必要があります。リンク先の SimpleCursorLoader はサポート ライブラリを使用しています。コードは提供していませんが、サポート ライブラリが提供するものではなく、デフォルトの LoaderManager を使用している可能性があります。

したがって、このクラスを使用できるようにするには、Fragmentandroid.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);
    }

...

}
于 2013-01-08T04:35:43.907 に答える