我正在使用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);
那可能是什么问题?
答案 0 :(得分:2)
假设您的意图修改正确,请移动您的Intent
代码
从AsyncTask的doInBackground方法到onPostExecute函数。
您无法修改doInBackground内部的任何视图,您必须在其中一个保证在事件派发线程上运行的回调函数中执行此操作。
答案 1 :(得分:1)
if( this error == compile time error){
`DownloadReceiver` class should implements the Parcelable interface
}
else{
我认为你收到一个错误,因为你在doInBackground()
方法中创建了Handler对象,该方法在另一个线程中执行而不是用于UI,然后在你的应用程序中的一些位置访问{ {1}}使用该UI Thread
个对象
。注意:要正确执行此操作,您应该在Handler
中创建Handler
。对你的案子来说,这是一个多好的地方。
UI Thread
或将其作为实例变量。并在构造函数中传递它;
}