Đầu tiên, xin lỗi vì tiếng anh xấu của tôi, tôi là người nói tiếng Bồ Đào Nha và chắc chắn tôi sẽ phạm một số sai lầm ngữ pháp tiếng Anh.AscyncTask - Không phải trên chủ đề chính
Vâng, tôi đang cố gắng để làm một lớp AsyncTask để tải bản đồ từ googlemap, nhưng nó hiển thị thông báo lỗi này:
06-25 18:47:03.062: E/AndroidRuntime(8021): FATAL EXCEPTION: AsyncTask #1
06-25 18:47:03.062: E/AndroidRuntime(8021): java.lang.RuntimeException: An error occured while executing doInBackground()
06-25 18:47:03.062: E/AndroidRuntime(8021): at java.lang.Thread.run(Thread.java:856)
06-25 18:47:03.062: E/AndroidRuntime(8021): Caused by: java.lang.IllegalStateException: Not on the main thread
lớp chính của tôi những gì gọi là lớp AsyncTask
public class ExemploGPSSimples extends FragmentActivity {
protected GoogleMap map;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.exmeplo_gps);
}
@Override
protected void onResume() {
super.onResume();
configuraGPS();
}
private void configuraGPS() {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.fragment_gps);
map = mapFragment.getMap();
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
//LatLng local=pegaPosicaoAtual();
Localizador localizador = new Localizador(this);
String endereco="Av. João Pessoa, 1091, Porto Alegre, RS";
LatLng local = localizador.getEndereco(endereco);
SincronizaMapa sincronizaMapa = new SincronizaMapa(this,local,map);
sincronizaMapa.execute();
adicionaMarcador(map,local);
map.setMyLocationEnabled(true);
}
private void adicionaMarcador(GoogleMap map2, LatLng local) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(local).title("Luiz").snippet("Casa");
Marker marker = map2.addMarker(markerOptions);
}
}
và cuối cùng là lớp AsyncTask
public class SincronizaMapa extends AsyncTask<Void, Void, Void> {
private final Activity activity;
private final LatLng local;
private final GoogleMap map;
private ProgressDialog progressDialog;
public SincronizaMapa(Activity activity, LatLng local,
GoogleMap map) {
this.activity = activity;
this.local = local;
this.map = map;
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(activity, "Sincronizando mapa", "Aguarde...",true,true);
}
@Override
protected Void doInBackground(Void... params) {
CameraPosition position = new CameraPosition.Builder()
.target(local)
.bearing(0)
.tilt(0)
.zoom(17)
.build();
CameraUpdate update = CameraUpdateFactory.newCameraPosition(position);
map.animateCamera(update);
return null;
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
}
Cảm ơn tất cả vì đã trợ giúp.
Đừng lo lắng; tiếng Anh của bạn thật xuất sắc. Tốt hơn nhiều người Mỹ, IMHO. –