Android 在TaskSync中使用Google地图和addMarker?

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

我如何使用谷歌地图和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.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();
        }
    });