0

我正在使用 asy 任务来执行加载过程,而服务应该负责连接。我在线上遇到了一些错误:

serviceIntent.putExtra("receiver",new DownloadReceiver(new Handler()));

当我使用 AsyncTask 和服务进行连接时。我的 AsyncTask 代码是:

 private class DownloadReceiver extends ResultReceiver{
public DownloadReceiver(Handler handler) {
    super(handler);
}

@Override
   protected void onReceiveResult(int resultCode, Bundle resultData) {
    super.onReceiveResult(resultCode, resultData);
  //  if (resultCode == DownloadService.UPDATE_PROGRESS) {
        int progress = resultData.getInt("progress");
     //   mProgressDialog.setProgress(progress);
     //   if (progress == 100) {
       //     mProgressDialog.dismiss();
        }
    }



  protected String doInBackground(String... params) {

    Intent serviceIntent = new Intent();
            serviceIntent.putExtra("url", "www.google.com");

            new DownloadReceiver(new Handler());
            serviceIntent.putExtra("receiver",new DownloadReceiver(new Handler()));
    serviceIntent.setAction("connection.DownloadService");
    context.startService(serviceIntent);

那么可能是什么问题?

4

2 回答 2

2

假设您的 Intent 修改是正确的,然后将您的Intent代码从 AsyncTask 的 doInBackground 方法移动到 onPostExecute 函数中。

您不能从 doInBackground 内部修改任何视图,您必须在保证在事件调度线程上运行的回调函数之一中进行。

于 2012-06-30T04:24:18.427 回答
1
if( this error == compile time error){
`DownloadReceiver` class should implements the   Parcelable interface 
}
else{

我认为您遇到了一个错误,因为您在方法中创建了Handler对象,该 doInBackground()方法在 UI 线程之外的另一个线程中执行,然后在您的应用程序中的某个位置UI Thread使用该Handler对象访问。注意:要正确地做到这一点,您应该创建Handlerin UI Thread。为你的案子做这件事真是个好地方。

onPostExecute

或者把它作为一个实例变量。并将其传递给构造函数;

}

于 2012-06-29T22:07:16.047 回答