0
  1. 我有一个名为“A 类”的类 a) 我有一个名为 verify b) onClick of verify 我调用 auth.authenticate() 它返回布尔值 c) 为真 - 我必须调用一个意图

  2. 验证函数在另一个类中(auth 是一个参考)

  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

- 但这是在异步完成之前返回的。实际上它是正确的 - 因为这些是线程 - 并行运行,所以为了使其工作 - 我一直等到异步完成使用该同步块 - 但这会阻塞我的主线程 - (也没有进度条)

我可以在执行后成功调用我的下一个活动 - 因为我正在制作一个库类..我认为不应该......请帮助

}

4

2 回答 2

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() {}

}

希望这可以帮助

于 2012-05-09T09:16:46.067 回答
0

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

于 2012-05-09T08:33:06.890 回答