0

onpreExecte() 메소드의 Asynctask 클래스에서 진행 대화 상자를 사용하고 Google이지도의 경로를 만드는 동안 onPostExecute에서 대화 상자를 닫습니다. 내 문제는 대화 상자의 휠이 2 ~ 3 초 후에 멈추지 만 배경 프로세스가 여전히 작동하고 있다는 것입니다.Android ProgressDialog가 작업 완료 전에 회전을 멈 춥니 다.

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

미안하지만 작업 내에서 작업을 실행하고 있습니까? 왜 이것을 필요로합니까? – TheRedFox

+0

@ TheRedFox 죄송합니다. 질문을 편집했습니다. –

+0

작업이 아직 실행 중임을 어떻게 알 수 있습니까? 더 자세하게 얘기해 주 시겠어요? – TheRedFox

답변

0

당신은 당신이 onPostExcecute 내부에있는 모든 코드를 의미의 doInBackground 내부의 모든 "procesing"코드를 삽입해야합니다. UI를 수정하는 것만이 onPostExcecute에 있어야합니다 (예 : 사용자에게 메시지 표시, TextView의 텍스트 변경 등). 그렇지 않으면 UI가 엉망이됩니다. 나는 똑같은 문제가있어서 이런 식으로 해결했다.

희망 하시겠습니까?