在AsyncTask Android上没有调用onPostExecute

时间:2013-12-12 23:18:08

标签: java android android-asynctask

我在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;
        }
    }

3 个答案:

答案 0 :(得分:6)

您将通用参数定义为AsyncTask<Void, Void, Integer>,但在int中使用onPostExecute()。尝试替换

protected void onPostExecute(int result)

protected void onPostExecute(Integer result)

答案 1 :(得分:3)

在主UI线程上调用

onPostExecute()。如果它没有被调用并且您已经尝试了上面提到的所有其他技巧,则意味着您的UI线程被阻止执行其他操作。

答案 2 :(得分:0)

@Override添加到onPostExecute()方法中。它将突出显示您没有正确覆盖它。然后将其更改为:

@Override
protected void onPostExecute(Integer result)

你应该好好去。