2016-01-22 65 views
0

获取一个NullExceptionPointer我的Button setOnClickListener()方法得到一个NullException错误。至于为什么会发生这种事,我有点惊慌失措。请记住,这是我的第一个Android应用程序,并且我认为肯定会有一些运行时错误(没有编译错误)。我的setOnClickListener()

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

可以粘贴堆栈跟踪以及代码周围的seOnClickListener方法调用 – Mo1989

+1

setOnclickListener之前还添加代码,我怀疑你没有初始化按钮/视图 – AAnkit

+0

你好,我已经初始化按钮/视图。我不明白我为什么遇到这个错误。就像你们说的,我的代码没有错误,看起来完美无瑕。所以有些东西一定是错的,它会导致运行时错误。谢谢! – Linuxn00b

回答

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); 

,请务必让setContentView(R.layout.activity_main);之前初始化按钮查看。

希望它有帮助。

+1

非常好,那确实有效。为什么setContentView(R.layout.activity_main)必须在按钮声明之前进行?其实,我认为我知道为什么。如果我没有错误地设置输出,那么setContentView()方法会首先调用该方法,这很重要吗?谢谢约翰乔!可悲的是,它只需要移动两行代码ROFLLLL。其他一切都很好,我正在把我的头发拉出来。再次感谢! – Linuxn00b

1

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

1-确保你在一个方法里面定义你的监听器,如onCreate(), 我想你已经在类体中定义了。

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

Button btnDoSomething = (Button)findViewById(R.id.idOfButton); 

现在你可以setOnClickListener为它的一个例子。

+0

我将onCreate()方法添加到原始帖子中。请看一看。谢谢Rahmat! – Linuxn00b

+1

恭喜你的问题解决了,我看了一下,[John Joe](http://stackoverflow.com/users/5156075/john-joe)说:“**确保你调用了setContentView(R.layout.activity_main) ;在初始化您的按钮视图之前。“**, –

+0

谢谢Rahmat。我将铭记未来。 – Linuxn00b