0

私はAndroid用の辞書アプリを開発しており、CWACLoaderExライブラリを使用してSQLのうなり声の作業を処理したいと考えています。ローダーは正常に初期化されますが(onCreateLoaderで指定したSQLステートメントをlistViewに入力します)、ローダーをリセットしてユーザーの検索語で別のクエリを実行する方法がわかりません。

onQueryTextChangeでexecSQL ()を実行して、ユーザーが入力した各文字の検索を開始してみました。

loader.execSQL(sqlStatement, new String[] { query + "%" });

しかし、アプリは次のエラーでクラッシュします。

03-04 12:10:36.310: E/AndroidRuntime(15293): FATAL EXCEPTION: AsyncTask #4
03-04 12:10:36.310: E/AndroidRuntime(15293): java.lang.RuntimeException: An error occured while executing doInBackground()
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.lang.Thread.run(Thread.java:856)
* 03-04 12:10:36.310: E/AndroidRuntime(15293): Caused by: android.database.sqlite.SQLiteException: unknown error (code 0): Queries can be performed using SQLiteDatabase query or rawQuery methods only.
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1644)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at com.commonsware.cwac.loaderex.SQLiteCursorLoader$ExecSQLTask.doInBackground(SQLiteCursorLoader.java:188)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at com.commonsware.cwac.loaderex.SQLiteCursorLoader$ExecSQLTask.doInBackground(SQLiteCursorLoader.java:1)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-04 12:10:36.310: E/AndroidRuntime(15293):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
03-04 12:10:36.310: E/AndroidRuntime(15293):    ... 4 more

LoaderExのドキュメントによると、この方法でexecSQLを使用して、既存のSQLiteCursorLoaderを再利用できるはずです。ドキュメントを誤解しましたか?私は何が間違っているのですか?

4

1 に答える 1

4

SQLステートメントは明らかに結果セットを返します。これは、では許可されていませexecSQL()SQLiteDatabase。これはとは何の関係もありませんSQLiteCursorLoader

于 2013-03-04T20:39:21.903 に答える