我在应用程序A中创建了一个自定义内容提供程序,并让另一个应用程序B在A中访问此内容提供程序。以下是我的代码段:
在应用程序A中的内容提供者中:
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
int table = um.match(uri);
SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();;
// configure where to query from
if (table == MYKEYS || table == MYKEY_ID) {
sqlBuilder.setTables(DATABASE_TABLE_MY);
if (table == MYKEY_ID)
sqlBuilder.appendWhere(
_ID + " = " + uri.getPathSegments().get(1));
}
else if (table == FDKEYS || table == FDKEY_ID) {
sqlBuilder.setTables(DATABASE_TABLE_FD);
if (table == FDKEY_ID)
sqlBuilder.appendWhere(
_ID + " = " + uri.getPathSegments().get(1));
}
else
throw new IllegalArgumentException("Unknown URI: " + uri);
if (sortOrder==null || sortOrder=="")
sortOrder = DEFAULT_SORT_ORDER;
// query
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor c = sqlBuilder.query(
db,
projection,
selection,
selectionArgs,
null,
null,
sortOrder);
//register to watch a content URI for changes
c.setNotificationUri(getContext().getContentResolv er(), uri);
return c;
}
这是我在应用程序A清单文件中声明我的内容提供程序的方式:
<provider android:name=".KeysProvider"
android:authorities="com.android.keychain.keysprovider"/>
这是我在应用程序B中进行查询的方式:
String[] whereArgs = new String[]{"Private Key"};
Cursor c = managedQuery(MYTABLE_URI, null, "name", whereArgs, null);
当我运行应用程序B的代码时,我有以下错误:
07-02 12:53:58.153:ERROR / DatabaseUtils(9195):android.database.sqlite.SQLiteException:绑定或列索引超出范围:handle 0x126558
我真的不知道这里有什么问题。当我尝试从应用程序A中访问同一内容提供程序时,它工作正常。此外,从日志中看,似乎从应用程序B(在managedQuery行),它可以转到应用程序A中的此内容提供程序(KeysProvider) )但在尝试进行查询时死亡(在行:Cursor c = sqlBuilder.query ...)。谁知道这里有什么问题?
非常感谢