2013-12-12 3 views
1

Я видел все похожие вопросы здесь, на SO, и я использую AsyncTask в других действиях, но только в этом случае onPostexecute не вызывается.onPostExecute не вызывается в AsyncTask Android

вот мой код после частых попыток.

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 вернуть утратившие в щебнистом быть похожими на это:

class GetCamera1Task extends AsyncTask<Void, Void, Void> { 
protected void onPostExecute() { 
} 
protected Integer doInBackground(Void... params) { 
... return null; 
} 
} 

но опять ничего.

Код для загрузки растровой Ссылки на это:

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

Тот же вопрос и ответ: см. Http://stackoverflow.com/questions/6449438/asynctask-onpostexecute-not-being-called – user3080130

ответ

6

Вы определяете общие параметры, как AsyncTask<Void, Void, Integer>, но затем использовать int в onPostExecute(). Попробуйте заменить

protected void onPostExecute(int result) 

с

protected void onPostExecute(Integer result) 
0

Добавить @Override в свой onPostExecute() метод. Он подчеркнет, что вы не переопределили его должным образом. Затем измените его на:

@Override 
protected void onPostExecute(Integer result) 

и вы должны быть добры идти.

3

onPostExecute() вызывается в основном потоке пользовательского интерфейса. Если его не вызвали, и вы попробовали все другие трюки, упомянутые выше, это означает, что ваш поток пользовательского интерфейса заблокирован, делая что-то еще.

+0

Ответы 2 года назад. –

+4

Я знаю, но способ решения моей проблемы здесь не упоминается. Добавлено так, что это может помочь кому-то. –

Смежные вопросы