2013-08-06 5 views
0

Когда я извлекаю значение в результатах. Я ничего не получаю, я думаю, что значение не передается от doInBackground до onPostExecute. Любая идея, что не так? или я передаю его неправильным образомЗначение asyncTask не передается

class calculateTask extends AsyncTask<String, String, String> 
{ 
     @Override 
     protected String doInBackground(String... params) { 
      Thread t= new Thread(); 
       try { 
        t.sleep(10000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      int pix=0; 
      int circ=0; 
      int width1=mBitmap.getWidth(); 
      int height1=mBitmap.getHeight(); 

      for(int i=0;i<width1;i++) 
      { 
      for(int j=0;j<height1;j++) 
      { 

      if(mBitmap.getPixel(i, j)==Color.WHITE) 
      { 

       pix++; 
      } 

      if(mBitmap.getPixel(i, j)==Color.LTGRAY) 
      { 
       circ++; 
      } 
      } 
      } 
       int percentage=100-((pix-circ))*100 ; 
      String p=intToChar(array,percentage); 



      return p; 

     } 
     @Override 
     protected void onPostExecute(String p) { 


     Intent i= new Intent(circle1.this,results.class); 

     i.putExtra("perc", p); 

     startActivity(i); 

      //super.onPostExecute(result); 
     } 

    } 
    public String intToChar(char[] array, int pix) { 
     // TODO Auto-generated method stub 
     String b=""; 
      int i = array.length - 1; 
      while (pix > 0 && i >= 0) { 
       array[i--] = (char) (48 + pix % 10); 
       pix /= 10; 
      }  b = new String(array); 

      return b; 
    } 
+0

Почему у вас есть 'Thread t = new Thread()' doInBackground в вызове в фоновом потоке. Сбой приложения? – Raghunandan

+0

приложение, над которым я работаю, должно остановиться на 10 секунд, прежде чем переходить к следующему действию. –

+0

'sleep' - статический метод. вам не нужно создавать переменную 't' – aim

ответ

0

Я бы использовал глобальную переменную. Затем присвойте значение глобальной переменной в doInBackground, а затем верните ее в onPostExecute.

EDIT: Многие вещи ошибочны.

Вот один из моих примеров из кода

private class Load extends AsyncTask<Void, Void, Void> 
    { 
    private ProgressDialog progressDialog; 
    private Context context; 
    private boolean internet, refresh; 

    public Load(Context context, boolean internet, boolean refresh) 
    { 
     this.internet = internet; 
     this.refresh = refresh; 
     this.context = context; 
    } 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(context, null, "Loading data ..."); 
    } 

    @Override 
    protected Void doInBackground(Void... voids) 
    { 
     taskComplete = false; 
     while (!taskComplete) 
     { 
      getData(this.internet); 
      try 
      { 
       Thread.sleep(1000); 
      } 
      catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     super.onPostExecute(result); 
     populateData(); 
     progressDialog.dismiss(); 
    } 
} 

Try имитируя это. getData устанавливает taskComplete в true после его завершения.

+0

просто попробовал ... не работает –

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