Android ProgressDialog在任务完成之前停止旋转

时间:2014-12-09 13:00:28

标签: android asynchronous android-asynctask android-alertdialog progressdialog

我在onpreExecte()方法的Asynctask类中使用进度对话框,并在google创建地图路线时解除onPostExecute中的对话框。我的问题是滚轮对话框在2-3秒后停止,但我的后台进程仍在工作。

    private class ParserTask extends
            AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {

   @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(MapaViagem.this);
        // setup your dialog here
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setTitle("Traçando Rotas");
        dialog.setMessage("Aguarde...");
        dialog.setCancelable(false);
        dialog.show();

    }

        @Override
        protected List<List<HashMap<String, String>>> doInBackground(
                String... jsonData) {


            JSONObject jObject;
            List<List<HashMap<String, String>>> routes = null;

            try {
                jObject = new JSONObject(jsonData[0]);
                PathJSONParser parser = new PathJSONParser();
                routes = parser.parse(jObject);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return routes;
        }

        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> routes) {
            ArrayList<LatLng> points = null;
            PolylineOptions polyLineOptions = null;

            // traversing through routes
            for (int i = 0; i < routes.size(); i++) {
                points = new ArrayList<LatLng>();
                polyLineOptions = new PolylineOptions();
                List<HashMap<String, String>> path = routes.get(i);

                for (int j = 0; j < path.size(); j++) {
                    HashMap<String, String> point = path.get(j);

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng);

                    points.add(position);
                }

                polyLineOptions.addAll(points);
                polyLineOptions.width(4);
                polyLineOptions.color(Color.BLUE);
            }

            googleMap.addPolyline(polyLineOptions);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您必须将所有“正在处理”的代码放在doInBackground中,这意味着您在onPostExcecute中拥有的所有代码。只有修改用户界面的内容应该在onPostExcecute中(例如向用户显示消息,更改TextView的文字等),否则您的用户界面会被卡住。 我遇到了同样的问题并以这种方式解决了。

希望有所帮助