2013-08-06 3 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에서 값을 검색하십시오.

편집 : 많은 문제가 있습니다. 여기

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(); 
    } 
} 

이 모방 시도 코드에서 내 사례 중 하나입니다. 일단 완료되면 getData는 taskComplete를 true로 설정합니다.

+0

방금 ​​시도했습니다. 제대로 작동하지 않습니다. –

관련 문제