有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您的calcGpa()方法被用作onClick属性-正确的签名是calcGpa(View v)。如果你这样做,它会起作用