2013-12-23 2 views
-1

내 클래스의 전역 변수가 String authToken입니다. 이 클래스에서 나는 아래처럼 AsyncTask를 가지고 있고 onPostExecute 메소드는 전역 변수를 설정한다. onPostExecute의 로그 메시지가 authToken에 표시에도 불구하고, 어떤 이유로AsyncTask 이후에 내 전역 변수가 초기화되지 않습니다.

new AuthToken().execute(); 
Log.d("authToken: ", authToken+""); //print the fetched token 

하지만 authToken에 인쇄 할 때 execute()에 대한 호출 후 ... 그것은 아무것도 출력하지 :

class AuthToken extends AsyncTask<String, String, String> { 
    @Override 
    protected String doInBackground(String... args) { 
     MyAccount myAccount = new MyAccount(getApplicationContext()); 
     return myAccount.getAuthToken(); 
    } 
    @Override 
    protected void onPostExecute(String fetchedToken) { 
     authToken = fetchedToken; //assign it to global variable 
     Log.d("Inside token: ", authToken); 
    } 
} 

나는 다음과 같이 호출 : 내 로그 그래서

나는 참조 :

D/Inside token:﹕ 75e7d526-d0eb-4cb2-b294-a57e5dc2e5e4 
D/authToken: ] 

질문

onPostExecute 뒤에 내 글로벌 변수가 설정되지 않는 이유는 무엇입니까?

답변

3

로그 라인에 도달 할 때까지 asynctask가 완료되지 않았기 때문에 로그에 아무 것도 인쇄되지 않습니다. 그래서 당신은 아무것도 보지 않을 것입니다. 그것이 로그를 수행 new AuthToken().execute();을 예비 적 이후 있도록

AsyncTask를 새로운 스레드를 시작하지만

당신 변수가 설정되고있다. asynctask가 로그를 출력하기 전에 끝내기를 기다린다면 비동기 작업의 목적을 무효로 할 것입니다.

+0

나는 이해합니다. 그러나 다음과 같은 일을 어떻게 할 것인가 : 내 주요 활동에서 authToken을 가져오고 가져온 후에 그것을 설정했는지 여부를보고 싶습니다. 그럴 경우 - 계속 진행하고, 그렇지 않으면 로그 비활성을 표시하십시오. .... – birdy

+1

'onPostExecute'에서 토큰으로 원하는 작업을 수행하십시오. 이는 작업 완료 시점을 알 수있는 유일한 방법입니다. onPostExecute에 토큰이 있는지 여부를 나타내는 콜백 또는 무언가를 설정하십시오. – tyczj

관련 문제