서버가 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
}
});
진행률 대화 상자가 나타나면 응용 프로그램이 충돌합니까?
확인 [이] (HTTP : : 비동기에서 –