私は現在、データベース/ ContentProviderを使用して、ネットワークから取得され、データベースに定期的にローカルに保存される特定の位置データを提供するアプリケーションを開発しています。
データベースがアプリケーションで正しく作成されていることを確認しました。SQLブラウザーで表示するためにアプリのローカルデータベースのコピーをSDカードにエクスポートすることで、テーブルにデータが入力されます。したがって、存在しないデータは存在しません。ここでの問題。
奇妙な振る舞いは、私のデバッグプロセスのいくつかのスクリーンショットを通しておそらくよりよく視覚化されます:
そのため、最初にクエリを実行したとき、デバイスから取得したデータベースには行データが含まCursor
れているため、SELECT * FROM TABLE_NAME
ステートメントが値を返す必要があることを確認したにもかかわらず、すべてのオブジェクトが行数に対して-1を返していました。デバッガーの手順を次に示します。
カーソルが最初に返されるとき、mCountは-1として表示されることに注意してください。
好奇心から、cursor.moveToFirst();を追加しました。電話して、そのステップの後のスクリーンショットを次に示します。
カーソル数が-1から3に変更されたことに注意してください。これは、正しい行数に対応します(アプリケーションは3大陸atmしか考慮しないため)。残念ながら、この追加された不要な行はまだ私の問題を解決しません。CursorAdapter.bindView()とCursorAdapter.newView()は、結果のカーソルでまだ呼び出されないためです。
I'm confused as to what could be causing this issue, and how to fix it? If anyone could give any insight into what the problem could be, please let me know. Also, if any additional code is needed, such as the SQL create statements, etc let me know - however, as I've already mentioned the database is created fine and queries performed on the exported db copy outside of the Android application work just fine...
One last thing, the application is built for API levels 14+.
If you have an SQL query that are reading from the database you would want to delay reading that data until you are certain that you will use it.
したがって、呼び出すrawQuery
と、Cursor
オブジェクトへの参照を取得します。しかし、まだ何も読まれていません。これが何をするかmoveToFirst
です。これは、このSQLクエリの実行に真剣に取り組んでおり、結果が必要であることをカーソルに伝える最初のことです。
ただし、何も使用していrawQuery
ないため、で結果をフェッチしようとする前にデータベースに渡されますmoveToFirst
。
これがあなたの質問に答えることを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加