2012-04-02 11 views
0

サーバがGoogleマップ上のアドレスを検索しているときに進捗ダイアログを表示したい場合は、そのダイアログが消えます。私はそれをgoogledと結果の大部分は、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:// WWW .technotalkative.com/android-google-image-search-api-example-json-parsing-web-api-call-demo /)と[this](http://www.technotalkative.com/loading-remote-images /)実際的な例。 –

答えて

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

などを。最初に、あなたの非同期タスクコンセプトをブラッシュアップし、それらの実装を開始します。これにより、必ずクエリーが解決されます。

我々はまた、法Aysncタスクの

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

とdoInBackgroundから()下にあなたがラインの下に使用して進捗状況を更新することができます持って非同期で

0

publishProgress(10);