1

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

“广播接收机方法”

在另一个线程中提到,但这偏离了我认为理想的 Virgil 的方法。同样在这些行中,为什么requestSync不允许将 aResultReceiver作为附加内容的一部分传递。这通常不是与一个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);

这是另一个示例,带有教程(由 google 找到):

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

于 2012-07-16T18:42:32.310 回答