我只是想存储用户输入的值。只是将数据存储在变量中会导致我的应用程序在打开之前立即崩溃。老实说,我不知道为什么会这样。
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());
答案 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,因此不需要在那里编写代码。您应该将此代码放在保存数据的位置,或者使用按钮单击等数据执行某些操作。