3

私はAndroidでネイティブデータベースを管理するためにTrigger.ioプラグインの作成を使用していますが、最近この例外が発生し始めました。

android.database.sqlite.SQLiteException: not an error
at android.database.sqlite.SQLiteQuery.nativeFillWindow(Native Method)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:86)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201)
at io.trigger.forge.android.modules.database.NotesDatabase.cursorToArray(NotesDatabase.java:176)
at io.trigger.forge.android.modules.database.NotesDatabase.queryToObjects(NotesDatabase.java:127)
at io.trigger.forge.android.modules.database.NotesDatabase.queryToObjects(NotesDatabase.java:120)
at io.trigger.forge.android.modules.database.API.query(API.java:50)

したがって、スタックトレースで言及されている関数は次のとおりです。

//"atomic" is always true when this is called
public synchronized JSONArray queryToObjects(String query, boolean atomic) throws JSONException{
    if(atomic) open();
    Cursor c = db.rawQuery(query, null);
    JSONArray notes = cursorToArray(c);
    c.close();
    if(atomic) close();
    return notes;
}

private JSONArray cursorToArray(Cursor c) throws JSONException{
    final String[] columnNames = c.getColumnNames();
    JSONArray results = new JSONArray();

    for (c.moveToFirst();!c.isAfterLast();c.moveToNext()){
        JSONObject object = new JSONObject();
        for(String name : columnNames){
            int index = c.getColumnIndex(name);
                            //"get" is defined elsewhere, but this line never executes
            object.put(name, get(c, index));
        }
        results.put(object);
    }
    return results;
}

私が使用しているクエリは次のとおりです。

名前として個別のハッシュタグを選択し、ハッシュタグによるNoteTagグループからのカウントとしてcount(hashtags)を選択します

誰かが以前にこのようなことを経験したことがありますか?あなたがすることができるどんな提案にも前もって感謝します!

更新: カーソルに根本的な問題があるようです。「getColumnNames」を呼び出すと空の配列が返され、c.getCount()を呼び出すと同じエラーが発生します。

別の更新:

動作するいくつかのクエリ:

select * from Notes where  localID in (select distinct localID from NoteTag where hashtags == '#gold') and  status != 'delete'  order by timestamp desc  limit 0,25

select * from Notes where  localID in (select distinct localID from NoteTag where hashtags == '#woot' intersect select distinct localID from NoteTag where hashtags == '#yeah') and  status != 'delete'  order by timestamp desc  limit 0,25
4

1 に答える 1

4

解決策:問題の原因は、JavaScript側でforge関数を呼び出す方法でした。文字列が期待されるオブジェクト(「クエリ」パラメータ)を渡していました。これは、ネイティブブリッジによって文字列に強制変換されました。この例外は、「これはクエリではありません」というSQLiteの非常に回りくどい言い方でした。

于 2013-02-22T18:30:49.960 に答える