0

SQLite データベースを取得しました。データを listView に表示したいと思いますSimpleCursorAdapter

contactAdapter = new SimpleCursorAdapter(this, R.layout.contact_row, cursor, 
                                         new String[] { MyDb.ACCOUNT_NAME },
                                         new int[] { R.id.contactNameTv });

このまさにその行で、私は

IllegalArgumentException: 列 '_id' が存在しません。

ええと、JVMに感謝します。列を使用していないため、このステートメントも間違っているため、これで何をすべきかわかりません_id。データベースをエクスポートしてsqliteデータベースオープナーで開いたので、列が表示_idされますデータベースなので存在します。

このエラーがいつ表示され、何を伝えようとしているのか教えてもらえますか?

編集:

njzk2は私を正しく指摘しました.funcを取得するカーソルの「_id」列は照会されませんでした. ありがとう。

4

2 に答える 2

0

java.lang.IllegalArgumentException: column '_id' does not exist が原因で起動時にアプリがクラッシュする

このような同じ問題がある上記のサンプルを参照してください。

于 2013-01-30T11:00:20.627 に答える
0

解決

テーブルを作成するときに「_id」フィールドを追加する必要があります。

 //example 

   "CREATE TABLE TABLE_NAME (_id INTEGER PRIMARY KEY AUTOINCREMENT,field1 TEXT, field2 TEXT, etc TEXT)";
    

Cursor には「_id」という名前の列が含まれている必要があります。含まれていない場合、このクラスは機能しません。さらに、このクラスで {@link android.database.MergeCursor} を使用しても、マージされたカーソルの「_id」列に重複する値がある場合は機能しません。

警告!!

SimpleCursorAdapter このコンストラクターは、API レベル 11 で廃止されました。このオプションは、アプリケーションの UI スレッドでカーソル クエリが実行され、応答性が低下したり、アプリケーションが応答しないエラーが発生したりする可能性があるため、推奨されません。別の方法として、LoaderManager を CursorLoader とともに使用します。

http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html

別の方法は、CursorAdapter と CursorLoader を使用することです。

CursorAdapter は、たとえばデータベースから直接 ListView、GridView、または RecyclerView のデータのリストを表示する場合など、データベースを操作するときに非常に便利です。

CursorLoader はバックグラウンドで非同期クエリを実行します。

http://developer.android.com/reference/android/content/CursorLoader.html

お役に立てば幸いです!!

乾杯。

于 2015-08-09T15:51:47.713 に答える