3

私は基本的に、データ保存メカニズムの実装を除いて、開発中のアプリケーションを完成させました (私の最初のアプリケーションです!)。しばらく前にオプションを調べて、SQLiteDatabase を使用するのが最適であると判断しましたが、それを正確に実装する方法について頭を悩ますのは困難だったので、プログラムの残りの部分が完了するまでそのままにしておきました。それ以来、デバイスで実行するたびにすべての値を再入力してテストしています。

アプリは基本的に画面に何も表示されない状態で起動します。ユーザーは (メニューとダイアログを介して) プレーヤーを追加します。プレーヤー リストが完成したら、ユーザーはダイアログで [保存] をクリックします。次に、各プレーヤーのテーブル行が動的に拡張され、ボタン、いくつかの ImageView、および TextView が含まれ、すべて各プレーヤーのさまざまな属性が表示されます。それは私の質問にはあまり関係ありません。

したがって、私のアプリケーションは基本的に Player オブジェクトを追跡するだけです。これをガイドとして使用してデータベースオブジェクトをすべて構築しました: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/、ほとんどの場合、「連絡先」を「プレイヤー」に置き換えます。

私が理解できないのは、各プレーヤー オブジェクトの「保存」と「読み込み」を正確に実装する場所と、メイン アクティビティの onCreate、onResume、および onStop メソッドで何をすべきかということです。私はこれを何時間も調べていて、AsyncTask も実装する必要があることを学びましたが、それはさらに複雑であり、基本的なデータを脳にロードすることさえできません。 .

AsyncTask と SQLiteDatabase の両方を実装する方法の良い例が、Deitel 開発者シリーズの「Android for Programmers: An App-Driven Approach」という本を読んでいますが、その例では ListActivity で CursorAdapter を使用しているため、自分の状況に適用する方法がわかりません。(私のものはTabActivityです。上で説明したのは、「View Players」タブのみです。)

ユーザーが「プレイヤーの追加ダイアログ」で「保存」をクリックしたときにプレイヤーをデータベースに追加することは理にかなっていますが、プレイヤーオブジェクトを再ロードする場所と、各プレイヤーのテーブル行を再膨張させる場所がわかりません。

申し訳ありませんが、より正確にコードを投稿していませんが、それは一般的な質問であり、約 1000 行の長さなので、アプリ全体を投稿したくありません。どんな助けでも大歓迎です、私はここにすべての小さなことを投稿しないようにしていますが、このことは私をあまりにも長い間イライラさせてきました!

4

2 に答える 2

1

私はあなたと同じ本を持っています。私は AddressBook アプリ (DatabaseConnector を扱う) に従いましたが、かなり役に立ちました。これで、私のコードをあなたと共有できます (SQL/PHP スクリプトを介してログイン/登録するための別の Android Hive チュートリアルに従いました)。そうは言っても、私が現在取り組んでいる部分は、ローカル SQLite db の再実装です。ログインしているユーザーのメールなどを保存して、この情報を画面に表示できるようにする必要があります。さらに、ユーザーが詳細情報 (年齢、国籍など) を送信できるページがあり、アプリはそのデータを残りのアカウント情報と共に SQL サーバーに保存します。

私が言ったように、このコードを喜んであなたと共有したいと思いますが、それはローカルの SQLite データベースではなくネットワーク データベースであるため、あなたが探しているものとはまったく異なります。SQLite db の側面がありますが、その部分はまだ終わっていません。

最後に、あなたの Deitel の本から AddressBook をお勧めします。本当に役に立ちました。

于 2012-04-01T19:45:34.710 に答える
0

AsyncTask は、構成の変更 (電話のローテーションなど) に関しては面倒であり、メモリ リークを簡単に作成できます。むしろローダーを使用する必要があります。名前は気にしないでください。データの書き込みにも使用できます。基本的に、バックグラウンドで実行されるすべての操作に使用できます。より具体的には、AsyncTaskLoaderを使用し、loadInBackground()メソッドにデータベース ヘルパーを配置して、データを SELECT または INSERT します。データベース ヘルパーは SQLiteOpenHelper の拡張である必要があり、一度だけインスタンス化する必要があるため、アプリケーション コンテキストに配置してそこから参照を取得することをお勧めします。

それが役に立てば幸い。

于 2012-04-01T19:16:04.343 に答える