如何在使用SyncAdapter时通知活动有关同步错误的信息

时间:2012-04-11 05:36:45

标签: android android-syncadapter

我有一个名为student的表,我想从服务器填充。在我的活动中,我会显示一个进度条并致电ContentProvder.requestSync(Content URI of student..)。现在,如果我按照Virgil的说法正确理解,我应该在学生的ContentURI上添加一个观察者,以便在同步完成后由ContentProvider稍后通知。但是如果说有网络错误会发生什么。永远不会填充学生表,永远不会删除我的进度对话框。 我明白了

  

“广播接收器方法”

在另一个帖子中提到但是偏离了Virgil的方法,我认为这是理想的。 同样在这些行上,为什么requestSync不允许传递ResultReceiver作为附加内容的一部分。通常Service会回到Activity吗?

1 个答案:

答案 0 :(得分: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/