2013-08-18 1 views
0

AsyncTask에서 변수를 업데이트하려고하는데 어떻게해야할지 잘 모르겠습니다. 이것은 내가 뭘하려 다음 AsyncTask를 외부AsyncTask 중에 Activity의 변수를 업데이트하는 방법?

변수를 가지고 활동 클래스입니다 .. :

int myVariable = 0; 
MyTask hi = new MyTask(); 
hi.execute(); 
System.out.print(myVariable); 
class MyTask extends AsyncTask<Void, Void, Void> { 

     protected Void doInBackground(Void... args0) { 
        myVariable = 3; 
      return null; 

     } 
    } 

아직도 :(

i가 0을 출력 변수를 출력해라. 여전히 0이 아니라 3이된다. AsynTask를 좀 더 복잡하게 사용하고 있는데, 이것은 내가 달성하고자하는 것의 어리석은 버젼이다.

+0

어디에서 변수를 인쇄하고 있습니까? –

+0

AsyncTask – CynthiaDDurazo

+0

@ Phil를 보유하고있는 활동 클래스에서 방금 업데이트했습니다. – CynthiaDDurazo

답변

1

doInBackground() 또는 onProgressUpdate() 메서드 내에서 변수를 인쇄해야합니다. UI 스레드에서 doInBackground() 메서드가 실행되지 않기 때문에 변수가 증가하기 전에 print 문이 실행될 가능성이 높습니다. 이처럼

: ("인 myVariable는"정수 유형이라고 가정하고,이 AsyncTask를 당신의 활동의 내부 클래스)

class MyTask extends AsyncTask<Void, Integer, Void> { 

    protected Void doInBackground(Void... args0) { 

      for(int i = 0; i < 100; i++) { 

       myVariable++; 
       // like this: 
       Log.i("Variable", "" + myVariable); 
       // or like this: 
       publishProgress(myVariable); 
      } 

      return null; 
    } 

    protected Void onProgressUpdate(Integer... prog) { 
      Log.i("Variable", "" + prog[0]); 
    } 
} 

Plese이 에 대한 루프 내가 사용하고이 점에 유의 그냥 예제, 거기에 아무것도 할 수 다음 변수를 업데이트하고 게시 할 수 있습니다. 또한 내가 정수에 "진행"유형을 변경 한 점에 유의 :

AsyncTask<Void, Integer, Void> 
+0

감사! 이것은 정말로 도움이됩니다! 나는 당신이 나에게 이것을 말할 때까지 배경 스레드가 마지막으로 끝내고 있다는 것을 결코 알지 못했다! – CynthiaDDurazo

+0

당신은 오신 것을 환영합니다! –

0

AsyncTask를 주요 세 가지 방법이 onPreExecute, doInBackground, onPostExecute 있습니다.

AsyncTask를는 주로 로딩/프로세싱 대화 프로세스가 UI와 사용자 상호 작용이 완료 될 때까지되도록하는 비활성화를 나타내는 사용된다의 방법 onPreExecute.

방법은 주로 배경 계산 하 또는 웹 서비스를 호출사용되는 AsyncTask를 을 doInBackground.

AsyncTask를 주로 doInBackground 방법의 출력을 도시 사용되며가 UI수행 작업에 사용될 수의 방법 onPostExecute.

@CynthiaDDurazo : 그래서, 당신은 사용 onPostExecute 방법은 코드 에서 System.out.println (인 myVariable)을 넣어해야합니다 귀하의 경우;

관련 문제