1

ほとんどすべてのアクティビティで JSON を介してさまざまなデータを同期するアプリを開発しています。このデータは他のデバイスによって操作される可能性があるため、可能な限り最新の状態に保つ必要があります。

たとえば、最初のアクティビティで Web サービスにログインし、次のアクティビティで AsyncTask を使用して、ストア内のすべての車種を示す JSON をダウンロードし、その情報を使用して ListView を作成します。1 つの行をクリックして、別の AsyncTask を呼び出して、その車に関する特定の情報 (JSON) をダウンロードし、たとえばタイヤに関する情報を取得します。次のアクティビティでは、別の AsyncTask を呼び出して、それらのタイヤに関する特定の情報を取得します。ほとんどの場合、次のアクティビティで使用するために必要な情報は SharedPreferences に保存されます。これは、アプリ全体で ArrayLists にアクセスする方法がわからず、大量の RAM を使用するかどうかもわからないためです。また、アプリを通じて非常に多くのオブジェクトを共有することをお勧めします。

アクティビティがリロードされるたびに、AsyncTask が接続をチェックし、表示される新しいデータをダウンロードすることがわかります。サービスはプッシュをサポートしていないので、毎回チェックする責任があると思いますよね?

もう 1 つ考慮すべき点は、ダウンロードしたデータが変更される可能性があることです。その場合、JSON をアップロードし、それに応じてビューを更新する必要があります。この側面では、接続がダウンしたときにアップロードする「変更」を保存する方法がわかりません。同様に、同期されていないタスクのキューに入れられたリストを作成します。

その結果、アプリはインターネット接続に大きく依存し、アクティビティが再開されるたびに遅く感じられます。

ほとんどの場合、オブジェクト (車、タイヤなど) の新しい ArrayList をインスタンス化しますが、すべてがオブジェクトになった場合に JSON でデータを適切に同期する方法がわかりません。たぶんGJONを使用していますか?

このようなアプリを管理する方法について、いくつかのヒントが必要です。

ありがとう

4

1 に答える 1

1

すぐに私の考え。私は2つの非常によく似たアプリを持っているので...つまり、オンラインサービス/データベースに非常に緊密に結合されています。

あなたは本当にsqliteを使用してローカルデータベースを持っている必要があります。

これは、現在サーバーからデータをダウンロードして表示している各アクティビティを処理する方法の例です。

ListCarsActivity1)実行時に「」などの画面が読み込まれるたびに、onResume()最初にローカルDBを呼び出し、最新のデータを取得してから、これらの結果を画面ListViewなどに表示する必要があります。これにより、フィードバックが迅速になります。ユーザーに。

2)これに続いてonResume()、WebServiceオブジェクトを呼び出す必要があります。これにより、タスクWSGetCarsが開始されます。A)サーバーに接続し、JSON / XMLをダウンロードし、データを解析してデータベースを更新します(追加または更新など)アクティビティにアクセスできるヘルパーオブジェクトは、データベース呼び出しを再実行して、リストを新しいデータで更新します。Async

要するに:

  1. ロード画面、および車のローカルFASTデータベースリストでリストを埋める
  2. 更新された車のデータを即座に非同期でダウンロードし、ローカルデータベースを同期します
  3. 車のリストを更新します。

この原則はアプリ全体で使用できます。

Webサービスオブジェクトの私の提案を使用するかどうかはあなた次第です。しかし、私は通常、ダウンロードするWSオブジェクトを呼び出し、XML解析オブジェクトなどを利用するActivityを持っています。

うまくいけば、これは概念レベルで役立ちます

注:インターネットに接続していない限り、アプリがサーバーへの接続を試行しないように、各WS/Async呼び出しの前後に単純なIFステートメントも必要になります。「オフライン」のときにアプリが引き続き機能しているように見せることができます(データが古くなっている可能性があります)。

ログイン画面について:SharedPreferencesonResume()がロードされるたびに、それらがすでにログインしているかどうかを確認するために使用できます。ログインしている場合は、システムの内部ページを自動ロードします。私のアプリでは、インターネットに接続せずにログインすることはできません。したがって、これにより、最後の状態ですでにログインしている場合でも、アプリは引き続き機能します。

于 2013-03-06T03:39:34.920 に答える