由于使用了thread.get()方法,因此无法显示进度对话框

时间:2012-10-15 05:18:25

标签: android multithreading web-services thread-safety

我希望显示一个进度对话框,而我有两个线程一个接一个地运行,但我使用的数据结构通过线程填充,变为空。因此,我使用thread.get()方法等待线程完成....不知道我如何解决这个问题是我的一个异步线程的例子:

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

1 个答案:

答案 0 :(得分:0)

使用 AsyncTask 代替Thread,并在完成任务后调用其他任务。

可以通过new FetchData().execute();

方式调用AsyncTask
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();
        }
    }
}