2012-04-02 3 views
0

서버가 Google지도에서 주소를 찾을 때 진행률 대화 상자를 표시하고 진행이 완료되면 대화 상자가 사라집니다. 나는 그걸 봤 거든 결과의 대부분은 AsyncTask에 대한 이야기지만, 여전히 doInBackground 함수의 매개 변수와 onPreExecute() 및 onPostExecute()의 사용법에 대해 혼란 스럽다. 누군가 내게 그것에 대한 해결책을 줄 수 있을까요? 어떤 도움을 주셔서 감사합니다. 감사합니다.AsyncTask를 사용하여 Google지도를 검색하는 동안 진행 대화 상자 표시

protected void mapCurrentAddress() { 
    String addressString = addressText.getText().toString(); 
    Geocoder g = new Geocoder(this); 
    List<Address> addresses; 
    try { 
     addresses = g.getFromLocationName(addressString, 1); 
     if (addresses.size() > 0) { 
      address = addresses.get(0); 
      List<Overlay> mapOverlays = mapView.getOverlays(); 
      AddressOverlay addressOverlay = new AddressOverlay(address); 
      mapOverlays.add(addressOverlay); 
      mapView.invalidate(); 
      final MapController mapController = mapView.getController(); 
      mapController.animateTo(addressOverlay.getGeopoint(), new Runnable() { 
       public void run() { 
        mapController.setZoom(12); 
       } 
      }); 
      useLocationButton.setEnabled(true); 
     } else { 
      // show the user a note that we failed to get an address 
      alert(this, addressString); 
     } 
    } catch (IOException e) { 
     // show the user a note that we failed to get an address 
     e.printStackTrace(); 
    } 
} 

private class SearchAddress extends AsyncTask<Void, Void, Void> { 
     private final ProgressDialog dialog = new ProgressDialog(AddLocationMapActivity.this); 

     // can use UI thread here 
     @Override 
     protected void onPreExecute() { 
      this.dialog.setTitle("Checking"); 
      this.dialog.setMessage("Contacting Map Server..."); 
      this.dialog.show(); 
     } 

     // automatically done on worker thread (separate from UI thread) 
     @Override 
     protected Void doInBackground(Void... params) { 
      try { 

       mapCurrentAddress(); 
      } 
      catch(Exception e) { 
       Log.e("DEBUGTAG", "Remote Image Exception", e); 
      } 
      return null; 
     } 

     // can use UI thread here 
     @Override 
     protected void onPostExecute(Void res) { 
      if (this.dialog.isShowing()) { 
       this.dialog.dismiss(); 
      } 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      // TODO Auto-generated method stub 
      super.onProgressUpdate(values); 
     } 

} 
// this is the click event 
mapLocationButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      new SearchAddress().execute(); // crash during doing the doInBackground 
      //mapCurrentAddress(); // work perfectly 
     } 
    }); 

진행률 대화 상자가 나타나면 응용 프로그램이 충돌합니까?

+0

확인 [이] (HTTP : : 비동기에서 –

답변

0

asynctasks에 대한 기사가 많이 있습니다. 그들 중 일부는 내가 여기 언급하고있다 : 등등 http://developer.android.com/reference/android/os/AsyncTask.html

http://www.vogella.de/articles/AndroidPerformance/article.html

http://androidpartaker.wordpress.com/2010/08/01/android-async-task/

http://android10.org/index.php/articlesother/239-android-application-and-asynctask-basics

하고 있습니다. 먼저 비동기 태스크 개념을 닦아내고 구현을 시작하십시오. 이렇게하면 확실하게 쿼리가 해결됩니다.

publishProgress(10); 
0

우리는 또한
@Override 
protected void onProgressUpdate(Void... values) { 
    // TODO Auto-generated method stub 
    super.onProgressUpdate(values); 
} 

그리고 당신은 선 아래 사용하여 진행 상황을 업데이트 할 수 있습니다 Aysnc 작업의 doInBackground()에서 방법

아래에있는 // www가 .technotalkative.com/android-google-image-search-api-example-json-parsing-web-api-call-demo /) 및 [this] (http://www.technotalkative.com/loading-remote-images /) 실용적인 예.
관련 문제