2013-08-01 4 views
0

MainActivity와 별개의 AsyncTask 클래스가 있습니다.AsyncTask의 결과를 가져올 수 없습니다.

protected void onPostExecute(ArrayList<String> result) { 
      System.out.println("flag1"); 
      MainActivity.myLst=new ArrayList<String>(); 
      MainActivity.myLst=result; 
} 

는 내 MainActivity에서 다음과 같은 코드가 있습니다.

public void onCreate(Bundle savedInstanceState) { 
    new AsyncTask().execute(); 
    System.out.println("flag2"); 
    System.out.println(myLst.size()); 
} 

프로그램은 먼저 flag2를 출력하고, 그때 다른 활동을 제외하고 다시 주요 활동에 와서 myList.size 올바른 크기를 갖는 경우 myLst.size은 0이다. MainActivity 전에 AsyncTask에서 모든 것을 출력하고 작업해야한다고 생각했습니다.

+1

에서 .... 조각 내부 봐 결과를 얻고 싶었다 비동기 작업이 끝나기 전에 System.out.println을 실행하고 "목록을 채울 시간"이 있어야합니다. – nunofmendes

+0

'sysout'을'onPostExecute'의 마지막 줄에 넣으십시오 :'System.out.println (MainActivity.myLst);' – gunar

답변

3

AsyncTaskAsyncTask의 목적을 무효로하는 "MainActivity 이전에 작업을 수행하지"않습니다.

당신이하고 싶은 일은 가치를 다시 액티비티에 전달하는 인터페이스를 작성하는 것입니다. This answer에는 그 좋은 예가 있습니다.

3

비동기 적으로 작업을 수행하기 위해 AsyncTask를 만듭니다. "flag2는"다른 이전에 작성된 이유

것은 당신이 할 일을 가지고 다른 스레드에 말을하는지,하지만 당신은 당신을 위해 자신의 결과를 기다리지 않고있어, 그건. 당신이 결과를 기다려야 할 경우

, 당신은 비동기이 순서가 될 수 있음을 의미 onPostExecute()

1

에 콜백을 구현해야합니다. 비동기 작업은 종종 작업을 병렬 또는 백그라운드에서 메인 스레드로 보내는 다른 스레드를 시작합니다. execute()가 반환 할 때 비동기 작업이 완료된다고 절대 확신 할 수 없습니다! 다른처럼

1

는 말했다 내가 귀하의 게시물에 코멘트에 말한 것처럼, 비동기 비동기 적 의미하며, 귀하의 경우는 아마도 비동기 작업을 완료하기 전에에서 onCreate 코드를 마무리 것을 의미합니다.

중 하나는 MainActivity 내부의 AsyncTask를 클래스를 넣어 (그리고 PostExecute에 인쇄 할 몇 가지 메소드를 호출) 또는 비동기 작업을 통해 당신의 주요 활동을 통지 할 수 있도록 활동의 관측/관찰자 스타일을 구현합니다.

1

Asynctask를 호출하는 코드에서 onPostExecute() 메서드를 덮어 쓸 수 있습니다.

예를 들어 myAsyncTask라는 AsyncTask가 있습니다. 그런 다음 활동에이를 좋아합니까 :

new myAsyncTask() { 

     @Override 
     protected void onPostExecute(Result result) { 

      super.onPostExecute(result); 
      // Do something with result here 
     } 
    }.execute(value1); 

내가 같은 문제가 있었다, 나는 먼저 도착하기 때문에 될 수이 topic

관련 문제