Android 在TaskSync中使用Google地图和addMarker?
我如何使用谷歌地图和TaskSync添加标记?我有一个错误:Android 在TaskSync中使用Google地图和addMarker?,android,google-maps,android-asynctask,Android,Google Maps,Android Asynctask,我如何使用谷歌地图和TaskSync添加标记?我有一个错误: 01-23 12:11:26.226: E/AndroidRuntime(1878): Caused by: java.lang.NullPointerException 01-23 12:11:26.226: E/AndroidRuntime(1878): at com.example.maps3.MainActivity$MiTareaAsincronaDialog.onPreExecute(MainActivity.ja
01-23 12:11:26.226: E/AndroidRuntime(1878): Caused by: java.lang.NullPointerException
01-23 12:11:26.226: E/AndroidRuntime(1878): at com.example.maps3.MainActivity$MiTareaAsincronaDialog.onPreExecute(MainActivity.java:155)
谢谢
main.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
latitud = 40.42;
longitud = -3.688889;
mapa = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap();
CameraPosition cameraPosition = new CameraPosition.Builder().target(
new LatLng(latitud, longitud)).zoom(18).build();
mapa.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
mapa.setMapType(GoogleMap.MAP_TYPE_NORMAL);
pintarRuta();
btnAsyncDialog = (Button)findViewById(R.id.btnAsyncDialog);
btnAsyncDialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Procesando...");
pDialog.setCancelable(true);
pDialog.setMax(100);
tarea2 = new MiTareaAsincronaDialog();
tarea2.execute();
}
});
}
public void pintarRuta() {
ArrayList<LatLng> markerPoints = new ArrayList<LatLng>();
LatLng point = new LatLng(latitud, longitud);
markerPoints.add(point);
tarea2 = new MiTareaAsincronaDialog();
tarea2.execute();
}
private void tareaLarga(){
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
}
private class MiTareaAsincronaDialog extends AsyncTask<Void, Integer, Boolean> {
protected Boolean doInBackground(Void... params) {
for(int i=1; i<=10; i++) {
tareaLarga();
publishProgress(i*10);
if(isCancelled()) {
break;
}
}
return true;
}
protected void onProgressUpdate(Integer... values) {
int progreso = values[0].intValue();
pDialog.setProgress(progreso);
mapa.addMarker(new MarkerOptions()
.position(point)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))
.title("Posición inicial 1"));
}
protected void onPreExecute() {
pDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
MiTareaAsincronaDialog.this.cancel(true);
}
});
pDialog.setProgress(0);
pDialog.show();
}
protected void onPostExecute(Boolean result) {
if(result){
pDialog.dismiss();
Toast.makeText(MainActivity.this, "Tarea finalizada!", Toast.LENGTH_SHORT).show();
}
}
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
纬度=40.42;
纵向=-3.688889;
mapa=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap();
CameraPosition CameraPosition=新建CameraPosition.Builder().target(
新的LatLng(latitud,longitud)).zoom(18.build();
mapa.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
平塔鲁塔();
btnAsyncDialog=(按钮)findviewbyd(R.id.btnAsyncDialog);
btnAsyncDialog.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
pDialog=新建进度对话框(MainActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_微调器);
pDialog.setMessage(“Procesando…”);
pDialog.setCancelable(真);
pDialog.setMax(100);
tarea2=新的MiTareaAsincronaDialog();
tarea2.execute();
}
});
}
公共无效品塔鲁塔(){
ArrayList markerPoints=新的ArrayList();
车床点=新车床(横向、纵向);
标记点。添加(点);
tarea2=新的MiTareaAsincronaDialog();
tarea2.execute();
}
私有无效tareaLarga(){
试试{
睡眠(1000);
}捕获(中断异常e){}
}
私有类MitareAssincronaDialog扩展异步任务{
受保护的布尔doInBackground(Void…params){
对于(int i=1;i在onPreExecute
中写入progressdialog初始化代码,而不是在onClick
中,如下所示:
protected void onPreExecute() {
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Procesando...");
pDialog.setCancelable(true);
pDialog.setMax(100);
pDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
MiTareaAsincronaDialog.this.cancel(true);
}
});
pDialog.setProgress(0);
pDialog.show();
}
问题出在您的pintarRuta()
函数中。您正在执行mitaraasincronadialog()
asynctask,但此时无法使用progressDialog
实例,因为您正在单击btnAsyncDialog
按钮创建progressDialog实例。解决方案是在onCreate()中初始化progressDialog:
或者在asynctask的onPreExecute()
中双击这一行'01-23 12:11:26.226:E/AndroidRuntime(1878):在com.example.maps3.MainActivity$MiTareaAsincronaDialog.onPreExecute(MainActivity.java:155)'上,然后查看它将带到哪里,这将提供空点ok。它工作正常。您建议将我的pintarruta()方法和pDialog?@user3092292如果有效,那么您可以接受它作为答案,如果您正在异步任务的onPreExecute()中初始化progressDialog,那么您可以将pintaruta放入onCreate()中本身。是的,是的。它运行正常。我的问题是它是否是正确的站点?@user3092292是的,它是确定的。这是作为编辑添加的,应该是注释:编辑:我可以实时和非虚构地创建progressDialog?
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Procesando...");
pDialog.setCancelable(true);
pDialog.setMax(100);
pintarRuta();
btnAsyncDialog = (Button)findViewById(R.id.btnAsyncDialog);
btnAsyncDialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tarea2 = new MiTareaAsincronaDialog();
tarea2.execute();
}
});