views:

154

answers:

1

Can someone explain to me why this AlertDialog crashes?

package com.clicker;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class Clicker extends Activity
{
    public int clickerNumber = 0;
    private TextView clickerText;
    private Button clickerButton;
    private Button resetButton;

    // Called when the activity is first created.
    @SuppressWarnings("null")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Declare each of the layout objects
        clickerText = (TextView)findViewById(R.id.clickerText);
        clickerButton = (Button)findViewById(R.id.clickerButton);
        resetButton = (Button)findViewById(R.id.resetButton);

        clickerText.setText("0");

        final AlertDialog.Builder resetQuestion = null;
        resetQuestion.setTitle("Reset?");
        resetQuestion.setMessage("Are you sure you want to reset the counter?");

        resetQuestion.setPositiveButton("Yes", new OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                    clickerNumber = 0;
                    clickerText.setText("0");
            }

        });

        resetQuestion.setNegativeButton("No", new OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                dialog.dismiss();
            } 

        });

        clickerButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                clickerNumber++;
                clickerText.setText(Integer.toString(clickerNumber));
            }
        });

        resetButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                resetQuestion.show();
            }

        });
    };
};
+3  A: 

This is a great fail:

final AlertDialog.Builder resetQuestion = null;
resetQuestion.setTitle("Reset?");

You are trying to use a null object, and that (of course) will throw a NullPointerException

This is how I create dialogs (and I think it's the best way to do it):

LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.dialogo_layout, null);
final AlertDialog.Builder resetQuestion = new AlertDialog.Builder(YourActivity.this)
// do whatever you want with the resetQuestion AlertDialog

Here, R.layout.dialogo_layout represent a file called dialogo_layout.xml in the res/layout dir that contains the dialog layout.

Cristian
As Eclipse suggested this, I assumed that it was necessary, thanks for clearing that up.
Fraser