2012-05-09 93 views
0
  1. 我有一个被称为“类A”类 一个)我有一个称为验证 b按钮)的验证我打电话auth.authenticate(),其在真返回布尔 c)中的onClick - 我必须调用的意图在多线程异步

  2. 的authenticate函数在另一个类(AUTH是REF)

  3. 身份验证函数为()

布尔身份验证(){

new AsyncTask<String, String, String>() {  

    preExecute() 
    { 
     --starting a progress bar-- 
    } 
    doInBackground(String) 
    { 
     ---- huge authentication code----- 
     ------ returns true or false -------isVerified 

    } 
    onPostExecute(String) 
    { 
      --- dismiss progress bar----------- 
    }  
    }.execute(); 
    } 

    --------end of AsynTask block---- 

    synchronized (this) { 

     try { 
      this.wait(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

return isVerified; ---- this should return to MyClass - after async finishes 

- 但异步完成前,这是返回..实际上它是正确的 - 因为这些都是thread--平行,所以,使其工作 - 我已经等待异步完成使用该同步块 - 但这将阻止我的主线程 - (也没有进度条)

我可以打电话给我的下一个活动后执行成功 - 作为即时制作图书馆类..我认为不应该...请帮助

}

回答

0

您可以覆盖onPostExecute()并从那里返回您的值,如果任务被取消,它将不会被调用。

+0

但CHIS,同时“返回isVerified“将运行,而不管onPostExecute返回.. –

+0

从doInBackground()返回的值被传递给onPostExecute(),这不会被其他代码直接看到。请参阅AsyncTask的文档。 – ScouseChris

0

AsyncTasks也是线程。所以,你可以做一个新AuthenticateAsyncTask<Void,Void,Void>类认证,并重写onPostExecute方法,你可以调用一个函数的参数isVerified

对于防爆:

boolean isVerified; 

// Async Task 
class AuthenticateAsyncTask extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected Void doInBackground(Void... params) { 
     // Authentication 
     isVerified = returningValue // set your isVerified variable 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // you can here call a function that indicates the authenticaion value is returned 
    } 

    @Override 
    protected void onPreExecute() {} 

} 

希望这有助于

+0

你好Nafiz,感谢您的照顾它......而不是像你写的类,我有一个名为authenticate的函数中的匿名类 - 验证将返回true的真假,而无需等待异步完成..多数民众赞成的问题。 。我已经同步了这个等待 - 这样我就可以等到async完成了..但那会阻止我的线程。 –

+0

那么在doInBackground()函数中调用该认证函数呢? - 开始认证的AsyncTask - 来电doInBackground 认证功能 - 在身份验证函数返回时的AsyncTask的onPostExecute方法被调用 - 你可以等到的AsyncTask的onPostExecute()方法executen。 –

+0

nafiz我已编辑我的问题,请看看你是否有时间.. –