Android应用计算错误和崩溃

时间:2015-07-13 14:48:12

标签: java android crash

所以,伙计们,我在这里尝试通过 edittext&#39> 获取字符串来获取输入(日,月,年)然后转换为int并添加一个然后显示它。  我认为代码是错误的,因为当我尝试运行此应用程序崩溃时,如果我删除那些标记为" //错误"它并没有崩溃,但功能仍然不起作用。  你能帮帮我吗?

package com.example.bibiwars.skills;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class Age extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_age);

    Button getage = (Button) findViewById(R.id.getage);
    EditText ddtext = (EditText) findViewById(R.id.dd);
    String dds = ddtext.getText().toString();
    final int dd = Integer.parseInt(dds);                          //error
    EditText mmtext = (EditText) findViewById(R.id.mm);
    String mms = mmtext.getText().toString();
    final int mm = Integer.parseInt(mms);                           //error
    EditText yyyytext = (EditText) findViewById(R.id.yyyy);
    String yyyys = yyyytext.getText().toString();
    final int yyyy = Integer.parseInt(yyyys);                     //error
    final TextView output = (TextView) findViewById(R.id.output);

    getage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            output.setText("you wrote:" + (dd + mm + yyyy));
        }
    });
}}

2 个答案:

答案 0 :(得分:4)

填写后,您必须检索EditText的值。您无法在onCreate内确保这一点,因为您在查看完毕后尝试撤消值,并且用户无法在EditText中输入这些值。

EditText内检索onClick的值:

public void onClick(View v) {
    String dds = ddtext.getText().toString();
    final int dd = Integer.parseInt(dds);                          //error

    String mms = mmtext.getText().toString();
    final int mm = Integer.parseInt(mms);                           //error

    String yyyys = yyyytext.getText().toString();
    final int yyyy = Integer.parseInt(yyyys); 

    output.setText("you wrote:" + (dd + mm + yyyy));
}

答案 1 :(得分:4)

试试这个

public class Age extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_age);

    Button getage = (Button) findViewById(R.id.getage);
    EditText ddtext = (EditText) findViewById(R.id.dd);

    EditText mmtext = (EditText) findViewById(R.id.mm);

    EditText yyyytext = (EditText) findViewById(R.id.yyyy);

    final TextView output = (TextView) findViewById(R.id.output);

    getage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

             String dds = ddtext.getText().toString();
             int dd = Integer.parseInt(dds);

             String mms = mmtext.getText().toString();

             int mm = Integer.parseInt(mms);  

             String yyyys = yyyytext.getText().toString();
             int yyyy = Integer.parseInt(yyyys); 
            output.setText("you wrote:" + (dd + mm + yyyy));
        }
    });
}}

在将String转换为Int之前检查空

if (!TextUtils.isEmpty(yyyys))
{
    int yyyy = Integer.parseInt(yyyys); 
}

修改

onCreate()方法中,没有数据填充,因此它总是抛出NullPointerExceptionNumberFormatException - 正如 @ Roberto Tellez Ibarra的评论所述