2017-06-27 10 views
-1

Androidスタジオを使用して大学GPA電卓アプリケーションを作成しようとしています。 主に、このアプリケーションには、「クレジット」と「グレード」を入力として受け取った「EditText」という2つのビューがあり、「OK」ボタンをクリックすると動的に作成されたTextViewが表示されます。目に見えないエラーがなくAndroidアプリケーションがクラッシュする

ユーザーがEditTextビューに入力した値を格納するリストを定義しました。そして、 "GPAを計算する"ボタンが押されたとき、GPAを計算するメソッドを呼び出します。

問題は、アプリケーションがクラッシュしていますが、コードまたはログキャストに目に見えるエラーがないことです。ここで

はXMLファイルです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.example.parul.gpacalculator.MainActivity" 
    android:id="@+id/linearLayout"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:orientation="horizontal" 
     android:layout_margin="2dp"> 
     <EditText 
      android:id="@+id/txt_credits" 
      android:layout_width="0dp" 
      android:layout_height="44dp" 
      android:layout_weight="1" 
      android:layout_marginBottom="8dp" 
      android:layout_marginEnd="8dp" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginStart="8dp" 
      android:layout_marginTop="8dp" 
      android:ems="10" 
      android:hint="Input Credits" 
      android:inputType="number" 
      android: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 
      android:id="@+id/txt_grade" 
      android:layout_width="0dp" 
      android:layout_height="44dp" 
      android:layout_weight="1" 
      android:layout_marginBottom="8dp" 
      android:layout_marginEnd="8dp" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:layout_marginStart="8dp" 
      android:layout_marginTop="8dp" 
      android:ems="10" 
      android:hint="@string/input_grade" 
      android:inputType="textPersonName" 
      android:maxLength="1" 
      android: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 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:padding="2dp" 
     android:layout_margin="2dp" 
     android:orientation="vertical"> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:text="@string/button_okay" 
      android:layout_gravity="center_horizontal|center" 
      /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:text="@string/calculate_gpa" 
      android:onClick="calcGpa" 
      android: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

本当にクラッシュしますか?私はちょうどトーストの使用法を見て、あなたはそれに 'show()'を呼ぶのを忘れた(しかし、これはクラッシュではない) – Markaos

+0

こんにちは@Markaos、はい!それは本当にクラッシュします。 –

+0

クラッシュした場合、出力が表示されます。あなたが取得するエラーは 'java.lang.IllegalStateException:親または祖先でメソッドcalcGpa(View)を見つけることができませんでした。android:onClick属性のコンテキストがビュークラスに定義されていますandroid.support.v7.widget.AppCompatButton id 'button2'' – Markaos

答えて

0

あなたcalcGpa()方法はonClick属性として使用されている - 正しい署名calcGpa(View v)です。これを行うと正常に動作します

+0

ありがとうございました。それは今働いている。 :) –

関連する問題