0
  1. 「クラスA」というクラスがありますa)検証というボタンがありますb)検証のonClickでブール値を返すauth.authenticate()を呼び出しますc)trueの場合-インテントを呼び出す必要があります

  2. 認証機能は別のクラスにあります(authはrefです)

  3. 認証機能は以下の通りです()

boolean authenticate(){

 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

そこから値をオーバーライドonPostExecute()して返すことができます。タスクがキャンセルされた場合、タスクは呼び出されません。

于 2012-05-09T08:33:06.890 に答える
0

AsyncTask もスレッドです。したがって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 に答える