应用程序在尝试存储edittext值时立即崩溃

时间:2015-09-22 05:34:30

标签: android

我只是想存储用户输入的值。只是将数据存储在变量中会导致我的应用程序在打开之前立即崩溃。老实说,我不知道为什么会这样。

public class MainActivity extends Activity {


EditText StudentID;
EditText Name1;
EditText CStudy;
EditText Exam1;
EditText Exam2;
EditText Ass2;
EditText ass1;
EditText Examprog2;
Button save;

double studID = 0;
String SavedName = " ";
double CaseStudy = 0;
double Ex1 = 0;
double Ex2 = 0;
double assignment1 = 0;
double assignment2 = 0;
double prog2Exam = 0;

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_main);

    StudentID = (EditText) findViewById(R.id.StudentID);

    Name1 = (EditText) findViewById(R.id.Name1);
    CStudy = (EditText) findViewById(R.id.CStudy);
    Exam1 = (EditText) findViewById(R.id.Exam1);
    Exam2 = (EditText) findViewById(R.id.Exam2);
    ass1 = (EditText) findViewById(R.id.ass1);
    Ass2 = (EditText) findViewById(R.id.Ass2);
    Examprog2 = (EditText) findViewById(R.id.Examprog2);

    save = (Button) findViewById(R.id.save);

    String SavedName = Name1.getText().toString();
    double CaseStudy = Double.parseDouble(CStudy.getText().toString());
    double Ex1 = Double.parseDouble(Exam1.getText().toString());
    double Ex2 = Double.parseDouble(Exam2.getText().toString());
    double assignment1 = Double.parseDouble(ass1.getText().toString());
    double assignment2 = Double.parseDouble(Ass2.getText().toString());
    double prog2Exam = Double.parseDouble(Examprog2.getText().toString());
}

}

问题似乎在于这段代码

    String SavedName = Name1.getText().toString();
    double CaseStudy = Double.parseDouble(CStudy.getText().toString());
    double Ex1 = Double.parseDouble(Exam1.getText().toString());
    double Ex2 = Double.parseDouble(Exam2.getText().toString());
    double assignment1 = Double.parseDouble(ass1.getText().toString());
    double assignment2 = Double.parseDouble(Ass2.getText().toString());
    double prog2Exam = Double.parseDouble(Examprog2.getText().toString());

6 个答案:

答案 0 :(得分:2)

您必须将值保存代码放入buttonclick listner

       save.setOnClickListner(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                String SavedName = Name1.getText().toString();
            try {
                double CaseStudy = Double.parseDouble(CStudy.getText().toString());
                double Ex1 = Double.parseDouble(Exam1.getText().toString());
                double Ex2 = Double.parseDouble(Exam2.getText().toString());
                double assignment1 = Double.parseDouble(ass1.getText().toString());
                double assignment2 = Double.parseDouble(Ass2.getText().toString());
                double prog2Exam = Double.parseDouble(Examprog2.getText().toString());
            } catch (NumberFormatException exception) {
                //can't parse
            }
        }
    });

否则,您正在解析null / empty值,然后它可能会抛出异常。

最好用try - catch包装解析代码。因为它可能会抛出NumberFormatException,具体取决于值

答案 1 :(得分:2)

Double.parseDouble(CStudy.getText().toString())我认为,第一次有空值,所以当你试图将null解析为Double时,这就是它崩溃的原因。

所以,你必须检查条件,

if(!CStudy.getText().toString().equals(""))
{
     Double.parseDouble(CStudy.getText().toString())
}

并添加按钮的onClickListener,如下面的代码:

save.setOnClickListner(new View.OnClickListener() {
    public void onClick(View view) {
        String SavedName;
        double CaseStudy, Ex1, Ex2, assignment1,assignment2, prog2Exam;
        if(!Name1.getText().toString().equals(""))
            SavedName = Name1.getText().toString();
        if(!CStudy.getText().toString().equals(""))           
            CaseStudy = Double.parseDouble(CStudy.getText().toString());
        if(!Exam1.getText().toString().equals(""))           
            Ex1 = Double.parseDouble(Exam1.getText().toString());
        if(!Exam2.getText().toString().equals(""))           
            Ex2 = Double.parseDouble(Exam2.getText().toString());
        if(!ass1.getText().toString().equals(""))           
            assignment1 = Double.parseDouble(ass1.getText().toString());
        if(!Ass2.getText().toString().equals(""))           
            assignment2 = Double.parseDouble(Ass2.getText().toString());
        if(!Examprog2.getText().toString().equals(""))           
            prog2Exam = Double.parseDouble(Examprog2.getText().toString());
    }
});

答案 2 :(得分:0)

  

只是将数据存储在变量中会导致我的应用程序在打开之前立即崩溃。

你提到它在打开之前就崩溃了,这意味着那些EditText中没有数据并且你将NULL值设置到变量中,这会导致错误。

答案 3 :(得分:0)

即使在用户有机会填充edittext之前,您也在解析值,这将导致nullpointerexception。如果您在用户单击" save"之后尝试保存值。按钮,尝试以下代码:

save = (Button) findViewById(R.id.save);
save.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            String SavedName = Name1.getText().toString();
            double CaseStudy = Double.parseDouble(CStudy.getText().toString());
            double Ex1 = Double.parseDouble(Exam1.getText().toString());
            double Ex2 = Double.parseDouble(Exam2.getText().toString());
            double assignment1 = Double.parseDouble(ass1.getText().toString());
            double assignment2 = Double.parseDouble(Ass2.getText().toString());
            double prog2Exam = Double.parseDouble(Examprog2.getText().toString());
       };

答案 4 :(得分:0)

String SavedName = Name1.getText().toString();
    double CaseStudy = Double.parseDouble(CStudy.getText().toString());
    double Ex1 = Double.parseDouble(Exam1.getText().toString());
    double Ex2 = Double.parseDouble(Exam2.getText().toString());
    double assignment1 = Double.parseDouble(ass1.getText().toString());
    double assignment2 = Double.parseDouble(Ass2.getText().toString());
    double prog2Exam = Double.parseDouble(Examprog2.getText().toString());

此代码不应位于onCreate方法中。只需将此代码放在按钮单击的事件上即可。

答案 5 :(得分:0)

正如其他人所指出的,您正在OnCreate事件上编写此代码,该事件在活动初始​​化时调用。此时EditText值始终为NULL,因此不需要在那里编写代码。您应该将此代码放在保存数据的位置,或者使用按钮单击等数据执行某些操作。