質問

このエラーが発生しています

IllegalArgumentException:列「_id」は存在しません

使用する場合 SimpleCursorAdapter 私のデータベースから取得するために、そしてテーブルには実際にこれがあります _id 桁。これによくある問題に気づいたので、オンラインでソリューションの一部を考えると、私はそれを回避しようとしましたが、どれも機能しません。これは私のカーソルクエリです:

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"_id", "quote"}, new int[]{R.id.quote});

オリジナルには含まれていませんが、 _id 列、私は最近これを追加して問題を解決しようとしました。誰かが問題を解決するのに役立つかもしれないアイデアを持っていますか?

役に立ちましたか?

解決

データベースには「_ID」という列が必要ですが、SimpleCursoradaptorには返品が必要です。エイリアスでこれを行うことができます。

例は、列のあるテーブルがあることです...

uid,name,number

SimpleCursoradapterの場合はこれを照会するために、データベースでこれを行います rawQuery...

SELECT uid as _id,name,number FROM MY_TABLE

これは正常に機能し、必要な「_id」列をSimpleCursoradapterに提供します。

編集: 私が理解している限り、_IDフィールドは、カーソルハンドルのデータがアダプターやアダプタービューなどで正しく処理できることを確認するための一意のキーとして使用されます。

ドキュメントのデータモデルを見てください コンテンツプロバイダー.

どんな種類の「データベース」で一意のキーを使用して、ほとんど普遍的な実践であり、私が知る限り、列名「_id」(または「_id」)の使用は、単に物事を標準化して簡素化する方法ですデータベース、コンテンツプロバイダー、カーソル、アダプターなど

要するに、これらのさまざまなコンポーネントが正しく動作するためには、一意の値を持つデータ列が必要ですが、その列の名前が何であるかを「知る」必要があります。彼らは、私の列名「uid」が私の「名前」と「番号」列とは対照的に必要なものであることを、いわば「知る」ことはないでしょう。

他のヒント

テーブルに「_id」を持っていないか、クエリにそれを含めていません。それが例外を引き起こしているものです。以下も修正する必要があります。

CursorAdapterコンストラクターに対する最後の議論には、_IDの列参照がありません。

int []引数は、カーソルの値を入力するビューIDの配列です。文字列[]引数は、カーソルが指す行からの列名の配列です。

アレイを行うときに、アレイから同じ数の値を持っている必要があります。カーソルからのデータがカーソルからつかまれ、ビューに配置されているためです。各配列に同じ数の値がない場合、アダプターはデータをビューにマッピングするための適切な量の情報がないため、例外をスローします。

また、Javadoc for SimpleCursoradapterによると、そのコンストラクターはUIスレッドでクエリを実行するため、非推奨になります。それは悪いです。代わりにこれを使用してください:

http://developer.android.com/reference/android/widget/simplecursoradapter.html#simplecursoradapter%28android.content.context,%20int、%20android.database.cursor、%20java ]、%20int%29

簡単な修正は、引数リストの最後に「、0」を追加することです。

Androidアプリケーションで既存のSQLiteデータベースを使用しようとしている場合は、適切に動作させるために準備作業を行う必要があります。このブログ投稿では、プロセスについて詳しく説明しています。

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top