0

2つのスレッドを次々に実行しているときに進行状況ダイアログを表示したいのですが、使用するデータ構造がスレッドを介して入力され、nullになります。したがって、thread.get()メソッドを使用して、スレッドが終了するのを待ちます。これを回避する方法がわからないのは、非同期スレッドの1つの例です。

private void performDetailSearch(String reference) {

    String addplus = searchterm.replace(" ", "+");  
    RestClientDS restpSd = new RestClientDS();
    String url = PLACES_DETAILS_URL +"reference="+ reference + "&sensor=false&key=" + API_KEY;
    Log.d("url",url);
    String[] URL = {url};
    restpSd.execute(URL);

    try {
        restpSd.get();
    } 
    catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    catch (ExecutionException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
4

1 に答える 1

0

Thread の代わりにAsyncTaskを使用し、1 つのタスクが完了した後に別のタスクを呼び出します。

AsyncTask はこの方法で呼び出すことができますnew FetchData().execute();

private class FetchData extends AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);

    /** progress dialog to show user that the backup is processing. */
    /** application context. */

    protected void onPreExecute() {
        this.dialog.setMessage(getResources().getString(
                R.string.Loading_String));
        this.dialog.show();
    }

    protected Boolean doInBackground(final String... args) {
        try {

            //do your background work

            return true;
        } catch (Exception e) {
            Log.e("tag", "error", e);
            return false;
        }
    }

    @Override
    protected void onPostExecute(final Boolean success) {

        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            //call the another asynctask from here.
           // new FetchData2().execute();
        }
    }
}
于 2012-10-15T05:27:52.807 に答える