java Android应用程序崩溃,没有任何可见错误
我正在尝试使用Android Studio创建一个大学GPA计算器应用程序。
该应用程序主要有两个EditText
视图,当用户单击“确定”按钮时,将“信用”和“等级”作为输入,并以动态创建的TextView
显示
我定义了一些列表,这些列表将用户输入的值存储在EditText
视图中。当按下“计算GPA”按钮时,调用方法计算GPA
问题是我的应用程序正在崩溃,但代码或logcat中没有可见错误
以下是XML文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical"
tools:context="com.example.parul.gpacalculator.MainActivity"
安卓:id="@+id/linearLayout">
<LinearLayout
安卓:layout_width="match_parent"
安卓:layout_height="50dp"
安卓:orientation="horizontal"
安卓:layout_margin="2dp">
<EditText
安卓:id="@+id/txt_credits"
安卓:layout_width="0dp"
安卓:layout_height="44dp"
安卓:layout_weight="1"
安卓:layout_marginBottom="8dp"
安卓:layout_marginEnd="8dp"
安卓:layout_marginLeft="8dp"
安卓:layout_marginRight="8dp"
安卓:layout_marginStart="8dp"
安卓:layout_marginTop="8dp"
安卓:ems="10"
安卓:hint="Input Credits"
安卓:inputType="number"
安卓:textSize="22sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.048" />
<EditText
安卓:id="@+id/txt_grade"
安卓:layout_width="0dp"
安卓:layout_height="44dp"
安卓:layout_weight="1"
安卓:layout_marginBottom="8dp"
安卓:layout_marginEnd="8dp"
安卓:layout_marginLeft="8dp"
安卓:layout_marginRight="8dp"
安卓:layout_marginStart="8dp"
安卓:layout_marginTop="8dp"
安卓:ems="10"
安卓:hint="@string/input_grade"
安卓:inputType="textPersonName"
安卓:maxLength="1"
安卓:textSize="22sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.188"
app:layout_constraintHorizontal_bias="0.505" />
</LinearLayout>
<LinearLayout
安卓:layout_width="match_parent"
安卓:layout_height="100dp"
安卓:padding="2dp"
安卓:layout_margin="2dp"
安卓:orientation="vertical">
<Button
安卓:id="@+id/button"
安卓:layout_width="match_parent"
安卓:layout_height="0dp"
安卓:layout_weight="1"
安卓:text="@string/button_okay"
安卓:layout_gravity="center_horizontal|center"
/>
<Button
安卓:id="@+id/button2"
安卓:layout_width="match_parent"
安卓:layout_height="0dp"
安卓:layout_weight="1"
安卓:text="@string/calculate_gpa"
安卓:onClick="calcGpa"
安卓:layout_gravity="center_horizontal|center"/>
</LinearLayout>
</LinearLayout>`
logcat:View Logcat
以下是java代码:
public class MainActivity extends AppCompatActivity {
private LinearLayout mLayout;
private EditText mEditCreditText;
private EditText mEditGradeText;
private Button mButton;
private int perSubjectPoint=0;
private int totalCredits=0;
List<EditText> allCredits = new ArrayList<EditText>();
List<EditText> allGrades = new ArrayList<EditText>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLayout = (LinearLayout) findViewById(R.id.linearLayout);
mEditCreditText = (EditText) findViewById(R.id.txt_credits);
mEditGradeText = (EditText) findViewById(R.id.txt_grade);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(onClick());
TextView textView = new TextView(this);
}
private View.OnClickListener onClick() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
mLayout.addView( createNewTextView(mEditCreditText.getText().toString(), mEditGradeText.getText().toString()));
allCredits.add(mEditCreditText);
allGrades.add(mEditGradeText);
}
};
}
private TextView createNewTextView(String text1,String text2) {
final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
final TextView textView = new TextView(this);
textView.setLayoutParams(lparams);
textView.setText("Credit: "+text1+ "\nGrade: "+ text2);
return textView;
}
public int pointPerSubj(int number,String grade) {
int point;
if(grade.equalsIgnoreCase("S"))
point = 10;
else if (grade.equalsIgnoreCase("A"))
point = 9;
else if (grade.equalsIgnoreCase("B"))
point = 8;
else if (grade.equalsIgnoreCase("C"))
point = 7;
else if (grade.equalsIgnoreCase("D"))
point = 6;
else if (grade.equalsIgnoreCase("E"))
point = 5;
else
point = 0;
int perSubjectPoint = number * point;
return perSubjectPoint;
}
public void calcGpa() {
int size = allCredits.size();
String[] stringsGrade = new String[size];
Integer[] intCredits = new Integer[size];
for(int i = 0; i < size; i++){
stringsGrade[i] = allGrades.get(i).getText().toString();
intCredits[i] = Integer.parseInt(allCredits.get(i).getText().toString());
totalCredits = totalCredits + intCredits[i];
perSubjectPoint = perSubjectPoint + pointPerSubj(intCredits[i], stringsGrade[i]);
}
float gpa = perSubjectPoint/totalCredits;
Toast.makeText(this,"Your GPA is: "+gpa, Toast.LENGTH_LONG);
}
}
# 1 楼答案
您的
calcGpa()
方法被用作onClick
属性-正确的签名是calcGpa(View v)
。如果你这样做,它会起作用