2 sinat 23870319 sinat_23870319 于 2016.02.13 12:35 提问

请问在调用自定义控件的button事件时会有空指针错误

出错的代码如下,是菜单中的按钮事件,点击就会出现空指针错误。如果把setOnClickListener注释掉就不会出错。请问各位为什么会报错呢?代码如下。

 public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case 1:
             LayoutInflater inflater = getLayoutInflater();
             View layout = inflater.inflate(R.layout.tel_dialog,
                     (ViewGroup) findViewById(R.id.dialog));
             AlertDialog.Builder builder = new AlertDialog.Builder(this);
             builder.setTitle("拨打电话");
             builder.setIcon(android.R.drawable.ic_dialog_info);
             builder.setView(layout);
             tel = (EditText)findViewById(R.id.telNum);
             dialing = (Button)findViewById(R.id.dialing);
             cancel = (Button)findViewById(R.id.cancel);

             dialing.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String telNum = tel.getText().toString();
                    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+telNum));
                    startActivity(intent);
                }

             });

             cancel.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                    }

                 });

             builder.show();
            break;
        case 2:
            MainActivity.this.finish();
            break;
        }

        return true;
    }

不胜感激!

3个回答

91program
91program   Ds   Rxr 2016.02.13 13:45

为了程序的健壮性,在使用前最好判断一下是否为空?
为空的原因,需要进一步判断:是偶尔出现,还是必现?如果是必现,则应该控件ID的原因;如果是偶尔出现,可能是程序中其它代码有问题导致的,如:越界。

leilba
leilba   Rxr 2016.02.13 15:47

我想你应该要这样来获取菜单界面上面的控件

tel = (EditText)layout.findViewById(R.id.telNum);
dialing = (Button)layout.findViewById(R.id.dialing);
cancel = (Button)layout.findViewById(R.id.cancel);

如果我想得没错的话这几个控件都是layout这个view里面的

fk002008
fk002008   2016.02.13 17:23

空指针错误
dialing.setOnClickListener
cancel.setOnClickListener

那就是上面这2个对象是null
没有取出来这2个对象

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!