2

CursorLoaderを使用してクエリからのデータをListViewに入力しようとしています。私はCursorLoadersを初めて使用し、Beginning Android 4ApplicationDevelopmentから取得したコードを使用しています。ご覧のとおり、インテントからデータを取得しています。インテントのデータは私が欲しいものです。デバッガーで確認しました。ただし、データベースにクエリを実行すると、ListViewに何も表示されません。誰か助けてもらえますか?

public class MyList extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {

private static final String TABLE_BASEPATH = "tbl";
private static final String AUTHORITY = "SQLData";
public static final Uri MY_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_BASEPATH);    

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent myData = getIntent();
    Bundle info = myData.getExtras();

    if (info != null){
        Cursor c;
        String[] dataColumns = { "mycolumn" };
        String selection = "level = '" + info.getString("Level") + "'";

        if (android.os.Build.VERSION.SDK_INT < 11)
            c = managedQuery(MY_URI, dataColumns, selection, null, "ORDER BY mycolumn");
        else
        {
            CursorLoader cursorloader = new CursorLoader(this, MY_URI, dataColumns, selection, null, "ORDER BY mycolumn");
            c = cursorloader.loadInBackground();
        }

        int[] viewIDs = { R.id.mylist1 };
        SimpleCursorAdapter adapter;

        if (android.os.Build.VERSION.SDK_INT < 11)
            adapter = new SimpleCursorAdapter(this, R.layout.mylist, c, dataColumns, viewIDs);
        else
            adapter = new SimpleCursorAdapter(this, R.layout.mylist, c, dataColumns, viewIDs, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        this.setListAdapter(adapter);
    }
}

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    return new CursorLoader(this, MY_URI,
            PROJECTION, null, null, null);  
}

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    switch (loader.getId()) {
      case LOADER_ID:
        mAdapter.swapCursor(cursor);
        break;
    }

}

public void onLoaderReset(Loader<Cursor> loader) {
    mAdapter.swapCursor(null);

}

カーソルを使用しているのか、CursorLoaderを使用しているのかは関係ありません。バージョンが11(カーソル)未満の場合、データは取得されません。11より大きい場合(CursorLoader)まだデータを取得しません。

4

1 に答える 1

2

ContentProvidersを使用する場合は、プロジェクションのid列に入力する必要があります。そうしないと、「機能しません」。私はあなたがやっていると思います>apiレベル11..。

String[] dataColumns = { "mycolumn" };

上記のコードには、idフィールドを含める必要があります。idフィールドが「_id」の場合(Samsの回答のように):

String[] dataColumns = { "mycolumn", "_id" };
于 2012-10-26T08:21:32.900 に答える