私はいくつかのテーブルを備えたAndroidコンテンツプロバイダーを書いています。testDataという名前のテーブルとtestDataInspectorという名前のテーブルがあるとします。testDataにはcreatedDateという名前の列があり、testDataInspectorにはcreatedDateという別の列名があります。コンテンツプロバイダーで、testData.createdDateが既に存在する場合、SDKがtestDataInspector.createdDateという名前の列を見つけることができないことがわかりました。テーブル間で異なる列名を区別するために、列名にテーブル名のプレフィックスを追加する必要があることがわかりました。contentProviderにtestDataInspectorを照会したいのですが、異なるテーブルに同じ名前の2つの列名が見つかりません。私は正しいURIを持っており、URIマッチャーを正しく使用しています。私のインサートは正常に機能します。
例 :
(テーブルtestDataの場合)
int creatorId = c.getColumnIndex(TestDataMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataMetaData.CREATED_DATE_COLUMN_NAME);
(テーブルtestDataInspectorの場合)
int formName = c.getColumnIndex(TestDataInspectorMetaData.FORM_NAME_COLUMN_NAME);
int data = c.getColumnIndex(TestDataInspectorMetaData.DATA_COLUMN_NAME);
int creatorId = c.getColumnIndex(TestDataInspectorMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataInspectorMetaData.TESTDATA_CREATED_DATE_COLUMN_NAME);
他の誰かがこれに出くわしましたか?SQLite内のポインタと関係があるのだろうかと思います。2.2以降のSDKバージョンでアプリケーションをコンパイルする場合、これが当てはまることがわかりました。ContentProvidersは主にに使用されますが、必然的に一度に1つのテーブルのルールになります。
私が持っているもう1つの質問は、ContentProvider自体のProjectionMap内で列がエイリアスされる方法と関係があるかどうかです。私は過去にコンテンツプロバイダーと協力してきましたが、通常、それらは1つのテーブルにすぎません。私が現在取り組んでいるプロジェクトには、私が過去に慣れていたものと比較して、かなり大規模なデータベースが必要になります。私は修正を見つけ、理由をいじるのに時間を費やすことができないので、この質問の助けは役に立ちます。