2012-04-27 3 views
1

я написал код, как показано нижеКак синхронизировать операторы в AsyncTask doInBackground() метод в Android

общественного класса SplashScreen расширяет BaseActivity {

public void onCreate(Bundle savedInstanceState){   
    super.onCreate(savedInstanceState); 
    new DownloadPlistTask().execute("background","Progress","yes"); 
} 
private class DownloadPlistTask extends AsyncTask<String,String,String>{ 


protected String doInBackground(String... dummy){ 
    return compareLocRemPlist(); 
} 
    protected void onProgressUpdate(String... progress){ 
     //some code here. 
    } 

    protected void onPostExecute(String result){ 
    //handle return type from doInBackground. 
    } 

public String compareData(){ 
    final Timer timer = new Timer(); 
    timer.schedule(new TimerTask(){ 
     public void run(){ 
     //code regarding webservices. 
     if(boolValue){ 
     //if the boolValue from the webservice is true,cancel the timer. 
      timer.cancel(); 
      } 
    },5*60*1000,5*60*1000); 
    return "finish"; 
    } 
} 
} 

В приведенном выше коде от OnCreate() IAM вызов AsyncTask doInBackground в doInBackground iam, вызывающий метод с именем compareData(). В методе compareData() iam с использованием таймера. Таймер отправляет запрос для веб-службы, в веб-службе iam получается логическое значение, если это правда, мне нужно return finish.If это false, я не хочу возвращать финиш, я должен оставаться в методе compareData(), и для каждого fi В течение нескольких минут он должен отправить запрос, пока я не получу истинное значение. Но когда таймер ждет пять минут, в течение этого времени выходят инструкции после таймера, а возвращаемое значение заканчивается на doInBackground, и элемент управления собирается onPostExecute(), но в фоновом режиме таймер работает. Как можно вернуться, когда я отменяю таймер

ответ

2

Поскольку вы используете его в doInBackground, вы можете выполнить проверку синхронно. Поэтому вместо таймера вы можете использовать метод Thread.sleep.

static final long RETRY_DURATION = 5*60*1000; 
public String compareData(){ 
    boolean boolValue = false; 
    do{ 
     //code regarding webservices. 
     if(!boolValue){ 
      try{ 
       Thread.sleep(RETRY_DURATION); 
      }catch(InterruptedException ex){ 
       ex.printStackTrace(); 
      } 
     } 
    }while(!boolValue); 
    return "finish"; 
} 
+0

Спасибо большое, я попробую и дам вам знать – user1195614

+0

да, он отлично работает, еще раз большое спасибо – user1195614