在我的setOnClickListener()上获取NullExceptionPointer

时间:2016-01-22 00:44:19

标签: java android

我在Button setOnClickListener()方法上遇到NullException错误。我有点大惊小怪为什么会这样。请记住,这是我的第一个Android应用程序,我认为肯定会有一些运行时错误(没有编译错误)。

btnNaira.setOnClickListener(new View.OnClickListener() {
   @Override
        public void onClick(View v) {
           dollarToNaira();
        }
});

可以在这里找到dollarToNaira()方法:

public void dollarToNaira() {

        try {
            dollarAmt = txtAmount.getText().toString();
            nairaAmt = (Double.parseDouble(dollarAmt) * 199.00);
            lblOutput.setText(dollarAmt + "U.S. Dollars = " + nairaAmt + " Nigerian Naira.");
        }catch(Exception ex) {
            message = "Please enter a valid numerical amount";
            lblOutput.setText(message);
        }finally {
            txtAmount.requestFocus();
            txtAmount.selectAll();
        }
    }

请告诉我我做错了什么我想知道是什么原因导致setOnClickListener方法返回NULL。谢谢!

编辑:这是整个onCreate()方法,我不相信我犯了错误:

protected void onCreate(Bundle savedInstanceState) {
        txtAmount = (EditText) findViewById(R.id.txtAmount);
        btnNaira = (Button) findViewById(R.id.btnNaira);
        btnCFA = (Button) findViewById(R.id.btnCFA);
        lblOutput = (TextView) findViewById(R.id.lblOutput);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        //set up event listener on btnNaira and btnCFA

        btnNaira.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dollarToNaira();
            }
        });


        btnCFA.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dollarToCFA();
            }
        });


                FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

2 个答案:

答案 0 :(得分:1)

您的代码没有问题。 我猜你在初始化按钮和文本视图时犯了一个错误。

1-确保在方法中定义侦听器,例如 Button btnDoSomething = (Button)findViewById(R.id.idOfButton); , 我认为你已经在课堂上定义了这个。

2-我猜你已经定义了按钮或文本视图, 但你没有初始化它们,所以它们是空的。 这是初始化按钮

的示例
setOnClickListener

现在你可以{{1}}了解它。

答案 1 :(得分:0)

你应该这样写

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtAmount = (EditText) findViewById(R.id.txtAmount);
        btnNaira = (Button) findViewById(R.id.btnNaira);
        btnCFA = (Button) findViewById(R.id.btnCFA);
        lblOutput = (TextView) findViewById(R.id.lblOutput);

确保在初始化按钮View之前致电setContentView(R.layout.activity_main);

希望它有所帮助。