如何使用AsyncTask显示AlertDialog

时间:2015-04-26 21:49:39

标签: android android-asynctask nullpointerexception

我正在尝试在Android中开发一款游戏,当我的玩偶在屏幕上用一个瓶子崩溃时,会显示一个带有2个选项的Dialog,但我不知道......

public void whenDollCrash(Grafico elementofaba,Grafico elementoBotella){

    if((elementofaba.getPosX()+elementofaba.getAncho()>=elementoBotella.getPosX()+15)&&
            (elementofaba.getPosX()+elementofaba.getAncho() <= elementoBotella.getPosX()+elementoBotella.getAncho()+15)&&
            (elementofaba.getPosY()+elementofaba.getAlto()>=elementoBotella.getPosY())
            && (elementofaba.getPosY()+elementofaba.getAlto() <= elementoBotella.getPosY()+elementoBotella.getAlto())){
        juego.detener();
        hiloFaba.detener();
        sonidoJuego.stop();
        golpe.start();

        Async a= main.new Async();
        a.execute();

        Log.i("parada", "esto furruca");

    }

我的班级AsyncTask是下一个。     公共类Async扩展AsyncTask {         AlertDialog.Builder构建器;

        @Override
        protected Void doInBackground(Void... params) {


            return null;

        }


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
             builder =
                    new AlertDialog.Builder(MainActivity.this);


        }


        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            builder.setMessage("¿Confirma la acción seleccionada?")
            .setTitle("Confirmacion")
            .setPositiveButton("Aceptar", new DialogInterface.OnClickListener()  {
                   public void onClick(DialogInterface dialog, int id) {

                            dialog.cancel();
                       }
                   })
            .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {

                            dialog.cancel();
                       }
                   });
            builder.create().show();
        }

帮助我!!

在logCat中始终显示NullPointerException

1 个答案:

答案 0 :(得分:0)

这家伙看起来很可疑

Async a= main.new Async();

你应该使用这样的东西

  public class Async extends AsyncTask<Void, Void, Void> {
    AlertDialog.Builder builder;
    WeakReference<Activity> activityWeakRef;

    public Async(Activity context) {
        activityWeakRef = new WeakReference<Activity>(context);
    }


    @Override
    protected Void doInBackground(Void... params) {


        return null;

    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();


    }


    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if (activityWeakRef != null && activityWeakRef.get() != null) {
            builder = new AlertDialog.Builder(activityWeakRef.get());
            builder.setMessage("¿Confirma la acción seleccionada?").setTitle("Confirmacion").setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            }).setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });
            builder.create().show();
        }
    }
}

并在自定义视图中使用它

Async a = new Async((Activity) getContext());
a.execute()