2012-09-27 4 views
0

나는 SQL 데이터베이스에 데이터를 게시하고, 그 활동에서 그 데이터를 가져 오는 AsyncTask를 가지고있다.안드로이드 AsyncTask 상태 루핑

문제는 응용 프로그램이 처음 실행될 때 데이터베이스가 비어 있기 때문에 문제가 발생하기 때문에 문제가 발생합니다. 그래서 AsyncTask가 완료 될 때까지 활동을 대기 상태로 만들고 데이터를 가져 오는 while() 루프를 만들려고했습니다. 내가 얻을 모든 흰색 화면입니다 몇 초 후 "응답하지"대화 :

MyAsyncTask task = new MyAsyncTask(this, country, img); 
    task.execute(); 

    SetSql mydb = new SetSql(this); 
    mydb.open(); 

    while(task.getStatus()!=AsyncTask.Status.FINISHED){ 
     //wait 
    } 

    countryCode = mydb.getLatestCode(); 
    Log.e("debug", countryCode); 
    mydb.close(); 

내가 방법을 알아낼 수 있기 때문에 어쨌든 데이터베이스를 사용하는 이유는 메신저에서 간단한 문자열을 다시 보낼 수 내 AsyncTask, 거기에 postExecute에서 할 수있는 방법은 무엇입니까?

답변

1

나는 이런 식으로, 당신이 당신의 자신의 onTaskDone 인터페이스를 만들 수 있다고 생각 :

public class TaskTest extends AsyncTask<String, Integer, String> { 

    interface TaskDoneListener { 
     abstract void onTaskDone(String result); 
    } 

    private TaskDoneListener t; 

    public TaskTest(TaskDoneListener t){ 
     this.t = t; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     // do your stuf 
     return "some thing"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     t.onTaskDone(result); 
     super.onPostExecute(result); 
    } 
} 

당신은이 통지 및 기능을 기다려 그 결과를 기다리는 스레드의 어떤 종류를 알리기 위해 onTaskDone를 사용하여 사용할 수 있습니다.

편집 :

이 onTaskDone 방법이 코드를 실행합니다

countryCode = mydb.getLatestCode(); 
Log.e("debug", countryCode); 
mydb.close(); 

편집 2 :

활동 예제 코드 :

public class TestActivity extends Activity implements TaskDoneListener { 
    /** Called when the activity is first created. */ 

    TaskTest task; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //create your layout and stuff 
    } 


    @Override 
    protected void onStart() { 
     super.onStart(); 

     //Dont start you task in the onCreate this could cause some weird behavior 
     //if the onCreate method is not yet done but your task is. 
     task = new TaskTest((TaskDoneListener) this, ##country_code?##, ##image?##); 
     task.execute(); 
    } 


    public void onTaskDone(String result) { 
     //set the results in your created views 

    } 

} 

롤프

+0

죄송합니다. asyncTasks에 조금 새로운 점이 있습니다 ... 어떻게 해야할지 잘 모르겠지만 ... 이상한 루프를 수정하거나 간단한 방식으로 활동에 AsyncTask 데이터를 보내는 간단한 방법이 필요합니다. – arielschon12

+0

더 나은 예제 코드를 만들 것입니다. 잠시만 기다려주십시오. –

+0

편집이 완료되었습니다. 지금 받으시겠습니까? 내가 만든 Task 클래스는 과정의 예이므로 자신의 메서드와 생성자 변수를 추가하십시오. 데이터를 기다릴 때 onCreate를 차단할 수는 없습니다. –

관련 문제