2

我在应用程序 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:错误/DatabaseUtils(9195):android.database.sqlite.SQLiteException:绑定或列索引超出范围:句柄 0x126558

我真的不知道这里出了什么问题。当我尝试从应用程序 A 中访问同一个内容提供程序时,它工作正常。另外,从日志中看,似乎从应用程序 B(在 managedQuery 行),它能够在应用程序 A 中访问这个内容提供程序(KeysProvider ) 但在尝试进行查询时死亡(在行:Cursor c = sqlBuilder.query ... )。有人知道这里有什么问题吗?

首先十分感谢

4

0 回答 0