进程对话框不会显示

时间:2015-02-21 07:50:30

标签: android dictionary progressdialog

在我的Android应用程序中,我编写了一个异步任务,从谷歌应用程序引擎数据库中获取地理位置数据。一切正常,除了进程对话框无论我做什么都不显示。我已经按照所有可用的教程等但无济于事。

以下是我的工作:

我有一项显示地图数据的活动。

public class MapActivity extends FragmentActivity....

//On click of a button OR when user location changes, following method is called:

    private void findAction(Location location){

        //this.progressDialog = new ProgressDialog(this);
        FetchHospitalsAsyncTask asyncTask = new FetchHospitalsAsyncTask(this);
        List<Hospital> nearByHospitals = null;
        try {
            nearByHospitals = asyncTask.execute(1000.0, latitude, longitude).get();
        }catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
}

...这是我的异步类

public class FetchHospitalsAsyncTask extends AsyncTask<Double, Void, List<Hospital>> {
    private static String TAG = FetchHospitalsAsyncTask.class.getName();
    private static HospitalApi hospitalApiService = null;
    ProgressDialog progressDialog = null;
    private Activity parentActivity = null;


    public FetchHospitalsAsyncTask(Activity parentActivity){
        this.parentActivity = parentActivity;
        this.progressDialog = new ProgressDialog(parentActivity);
    }


    @Override
    protected void onPreExecute(){
        progressDialog.setMessage("Please wait.Fetching data from server....");
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.show();
    }

    @Override
    protected void onPostExecute(List<Hospital> result){
        if(progressDialog.isShowing()){
            progressDialog.dismiss();
        }
    }

    @Override
    protected List<Hospital> doInBackground(Double... params) {
        /*
        */

        /*context = params[0].first;
        String name = params[0].second;
        String address= params[1].second;*/
        double radius = params[0];
        double lat = params[1];
        double lon = params[2];

        try {
            com.cypherlabs.mumbaihospitalfinder.backend.hospitalApi.HospitalApi.GetNearByHospitals nearByHospitals=hospitalApiService.getNearByHospitals(radius,lat,lon);
            nearByHospitals.getLastStatusCode();
            return nearByHospitals.execute().getItems();
        } catch (IOException e) {
            //return e.getMessage();
            return null;
        }
    }
}

进程对话框没有显示其存在的任何痕迹,而所有其他工作正常。使用所有标记等渲染地图。

2 个答案:

答案 0 :(得分:0)

您正在AsyncTask上调用.get()。这将导致AsyncTask同步而不是异步运行。这会导致UI线程被阻止,因此进度对话框将不会显示。

您需要在AsyncTask上调用execute()。这将导致AsyncTask在单独的线程中运行而不会阻止UI。请注意,onPreExecuteonPostExecute方法将在您从

调用execute的同一个线程上运行

答案 1 :(得分:0)

使用get()意味着它会冻结你的主ui线程,直到Async任务完成。添加进度对话框将在主Ui线程上运行。当你使用get()时,它不允许对主ui进行任何更改。因此,删除get(),您将获得进度对话框。