1

サーバーから入力したい学生というテーブルがあります。私のアクティビティでは、進行状況バーを表示して を呼び出しますContentProvder.requestSync(Content URI of student..)。ここで、Virgil の話に従って正しく理解できればContentURI、学生の にオブザーバーを追加して、後でContentProvider同期が終了したときに通知されるようにする必要があります。しかし、ネットワーク エラーが発生したとしたらどうなるでしょうか。生徒のテーブルが読み込まれることはなく、進行状況ダイアログが削除されることもありません。私は理解しています

「放送受信機アプローチ」

別のスレッドで言及されていますが、それは私が理想と考えるヴァージルのアプローチから逸脱しています。また、これらの行では、エクストラの一部としてrequestSynca を渡すことができないのはなぜですか。ResultReceiverそれは一般的に にService戻る話ではありませんActivityか?

4

1 に答える 1

2

SyncAdapterは、この種のシナリオで使用するためのものではありません。SyncAdapterデータのバックグラウンド同期を目的としており、ユーザーには表示されません。

あなたのケースはAsyncTaskに最適のように聞こえます。publishProgress()これにより、ネットワークタスクが別のスレッドで発生しているときに、プログレスバーを更新するために使用できます。あなたはオンラインでたくさんの情報と例を見つけることができますAsyncTask

上記のリンクからの例:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

次のように実行して実行します。

new DownloadFilesTask().execute(url1, url2, url3);

チュートリアル(単にグーグルによって見つけられた)で、これは別の例です:

http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

于 2012-07-16T18:42:32.310 に答える