我在SO上看到了所有类似的问题,我在其他活动中使用了AsyncTask,但只有这一个没有调用onPostexecute。
这是我的代码,经过几个小时的尝试。
class GetCamera1Task extends AsyncTask<Void, Void, Integer> {
private final ProgressDialog dialog = new ProgressDialog(
CameraGallery.this);
@Override
protected void onPreExecute() {
this.dialog.setMessage("Loading...");
this.dialog.show();
}
protected void onPostExecute(int result) {
System.out.println("onPostExecute");
this.dialog.dismiss();
}
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
bitmapResult1 = getBitmapFromURL(url[0]);
bitmapResult2 = getBitmapFromURL(url[1]);
}
System.out.println("should return");
return 1;
}
}
其中所有变量都是全局变量。 正在打印应该返回但是没有调用onPost执行。
我也尝试过我的onBackground返回null,并且sceleton如下:
class GetCamera1Task extends AsyncTask<Void, Void, Void> {
protected void onPostExecute() {
}
protected Integer doInBackground(Void... params) {
... return null;
}
}
但又一无所获。
从url下载bitMap的代码是:
public Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
答案 0 :(得分:6)
您将通用参数定义为AsyncTask<Void, Void, Integer>
,但在int
中使用onPostExecute()
。尝试替换
protected void onPostExecute(int result)
与
protected void onPostExecute(Integer result)
答案 1 :(得分:3)
onPostExecute()
。如果它没有被调用并且您已经尝试了上面提到的所有其他技巧,则意味着您的UI线程被阻止执行其他操作。
答案 2 :(得分:0)
将@Override
添加到onPostExecute()方法中。它将突出显示您没有正确覆盖它。然后将其更改为:
@Override
protected void onPostExecute(Integer result)
你应该好好去。