複数の ContentProvider に同じデータベース名を使用すると、「そのようなテーブルはありません」という例外がスローされてクエリが失敗します。
参考文献、本、インターネットでの議論を調べましたが、解決策が見つかりませんでした。
マニフェストで最初に宣言された 1 つの ContentProvider を除いて、すべての ContentProvider が失敗することに気付きました。したがって、一意のデータベース名を指定すると、例外はなくなります。動作しますが、単一テーブルのデータベースが複数あるのは奇妙です。
可能であれば、問題が発生する理由を突き止めたいと思います。以下は本質的に私の実装です。
すべての ContentProvider には、内部プライベート クラスとして定義された個別の SQLiteOpenHelper があります。DATABASE_NAME と DATABASE_VERSION はすべて同じです。
public class TheFirstProvider extends ContentProvider {
private static final String DATABASE_NAME = "dbname.db";
private static final int DATABASE_VERSION = 1;
private SQLiteOpenHelper dbHelper;
@Override
public boolean onCreate(){
mContext = getContext();
dbHelper = new FirstDbHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
}
private class FirstDbHelper extends SQLiteOpenHelper {
...
private static final String DATABASE_CREATE_FIRST = ... ;
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE_FIRST);
}
}