0

这是一个简单的安卓应用。它nullpointerexception在执行时显示。我无法从edittext. 在这里,我只想从edittext. 但它显示nullpointerexception..

如何解决这个问题?

public class Calci extends Activity  {
    Button add;
    String str1;
    String str2;
    EditText txt1;
    EditText txt2;
    TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calci);

        add=(Button) findViewById(R.id.button1);
        txt1=(EditText) findViewById(R.id.editText1);
        str1=txt1.getText().toString();
        txt2=(EditText) findViewById(R.id.editText2);
        str2=txt2.getText().toString();
        tv=(TextView) findViewById(R.id.textView4);

        addition();

        add.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                addition(); 
            }
        });
    }


    private void addition(){
        int res=0;
        res=Integer.parseInt(str1)+Integer.parseInt(str2);
        tv.setText(String.valueOf(res));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_calci, menu);
        return true;
    }
}
4

4 回答 4

2

只需 addition();onCreate(). 因为我怀疑它第一次打电话给你的时候EditTexts是空的。

此外,当您调用addition()方法时,您必须从两者中获取文本EditTexts

而你的方法addition()类似于,

 private void addition()
 {

  int res=0;
  str1=txt1.getText().toString();
  str2=txt2.getText().toString();
  res=Integer.parseInt(str1)+Integer.parseInt(str2);
  tv.setText(String.valueOf(res));
 }
于 2012-11-26T06:14:33.107 回答
2

确保您在 xml 中设置默认值, editText1或者editText2如果您想访问用户输入的值,则将您的代码更改为并在 setOnClickListener 之前删除 add() :

      //  addition();  comment this line 
        add.setOnClickListener(new View.OnClickListener() 
        {

            public void onClick(View v) 
            {
                  str1=txt1.getText().toString();
                  str2=txt2.getText().toString();
                  addition(); 

            }
        });
于 2012-11-26T06:14:46.760 回答
1

只需替换 oncreate() 中的 additiion() 方法并更改方法,如下所示

private void addition()
  {
         str1= str1==null?"0":str1;// do like this, so that if str1 returns null then it will be replaced by 0
         str2= str2==null?"0":str2;
         int res=0;
         res=Integer.parseInt(str1)+Integer.parseInt(str2);
         tv.setText(String.valueOf(res));
  }
于 2012-11-26T06:16:34.190 回答
0

你不要在这里调用addition()这个方法:

        str2=txt2.getText().toString();
        tv=(TextView) findViewById(R.id.textView4);

        //addition();


        add.setOnClickListener(new View.OnClickListener() 
于 2012-11-26T06:15:54.683 回答