繁体   English   中英

如何使Android Studio在textView中显示计算的值

[英]How do I get Android Studio to display the value of a calculation in a textView

我是android编程的新手,但在编程基本应用程序时遇到问题。 该应用程序应该计算课程考试中需要的分数,以便在课程中获得一定的分数(这不是家庭作业问题,而我正在研究)。 具体来说,我在寻找一种在textView小部件中显示计算结果的方法时遇到了麻烦。 我已经在下面发布了我的代码。 附带一提,我的应用程序在启动时也会立即崩溃,因此,如果您发现任何可疑的内容,那将大有帮助。 谢谢!

更新:感谢hai hack,我的应用程序现在可以正常打开。 但是,单击按钮后它仍然崩溃。 我已经更新了我的代码和logcat以显示所做的更改

主要活动:

 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.widget.EditText;
 import android.widget.TextView;
 import android.widget.Button;

 import static com.managergmail.time.finite.finitemanager02.R.id.calculateButton;
 import static com.managergmail.time.finite.finitemanager02.R.id.textViewExamMarkNeeded;

public class MainActivity extends AppCompatActivity {

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

   Button buttonCalculate = (Button) findViewById(R.id.buttonCalculate);
    buttonCalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText currentGradeInput = (EditText) findViewById(R.id.currentGradeInput);
            float currentGradeValue = Float.valueOf(currentGradeInput.getText().toString());
            //obtaining value of currentGrade inputted by the user and converting to float

            EditText desiredGradeInput = (EditText) findViewById(R.id.desiredGradeInput);
            float desiredGradeValue = Float.valueOf(desiredGradeInput.getText().toString());
            //obtaining value of currentGrade inputted by the user and converting to float

            EditText examWeightInput = (EditText) findViewById(R.id.examWeightInput);
            float examWeightValue = Float.valueOf(examWeightInput.getText().toString());
            //obtaining value of currentGrade inputted by the user and converting to float

            float currentGradeWeight = 100-examWeightValue;
            //calculating current grade weight

            final float examMarkNeededValue;
            examMarkNeededValue= ((100*desiredGradeValue)-currentGradeValue*currentGradeWeight)/examWeightValue;
            textViewExamMarkNeeded.setText((Float.toString(examMarkNeededValue)));
        }
    });
}
}

xml代码:

<android.support.constraint.ConstraintLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"

<TextView
    android:id="@+id/textView"
    android:layout_width="180dp"
    android:layout_height="45dp"
    android:text="@string/input_the_weighting_of_your_exam"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.078"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.356" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="180dp"
    android:layout_height="45dp"
    android:text="@string/input_your_desired_grade"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.078"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.19" />

<TextView
    android:id="@+id/textViewExamMarkNeeded"
    android:layout_width="265dp"
    android:layout_height="64dp"
    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.662"
    app:layout_constraintHorizontal_bias="0.378" />

<TextView
    android:layout_width="180dp"
    android:layout_height="45dp"
    android:text="@string/input_your_current_grade"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.073"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.034"
    android:id="@+id/textView3" />

<EditText
    android:id="@+id/currentGradeInput"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:ems="10"
    android:inputType="numberDecimal"
    tools:layout_constraintTop_creator="1"
    tools:layout_constraintRight_creator="1"
    tools:layout_constraintBottom_creator="1"
    android:layout_marginStart="17dp"
    app:layout_constraintBottom_toBottomOf="@+id/textView3"
    android:layout_marginEnd="33dp"
    app:layout_constraintRight_toRightOf="parent"
    tools:layout_constraintLeft_creator="1"
    app:layout_constraintTop_toTopOf="@+id/textView3"
    app:layout_constraintLeft_toRightOf="@+id/textView3" />

<EditText
    android:id="@+id/desiredGradeInput"
    android:layout_width="133dp"
    android:layout_height="31dp"
    android:ems="10"
    android:inputType="numberDecimal"
    tools:layout_constraintTop_creator="1"
    tools:layout_constraintRight_creator="1"
    tools:layout_constraintBottom_creator="1"
    app:layout_constraintBottom_toTopOf="@+id/examWeightInput"
    android:layout_marginEnd="33dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginTop="44dp"
    app:layout_constraintTop_toBottomOf="@+id/currentGradeInput"
    android:layout_marginBottom="42dp" />

<EditText
    android:id="@+id/examWeightInput"
    android:layout_width="0dp"
    android:layout_height="33dp"
    android:ems="10"
    android:inputType="numberDecimal"
    tools:layout_constraintTop_creator="1"
    tools:layout_constraintRight_creator="1"
    tools:layout_constraintBottom_creator="1"
    app:layout_constraintBottom_toTopOf="@+id/calculateButton"
    android:layout_marginStart="2dp"
    android:layout_marginEnd="2dp"
    app:layout_constraintRight_toRightOf="@+id/desiredGradeInput"
    android:layout_marginTop="12dp"
    tools:layout_constraintLeft_creator="1"
    android:layout_marginBottom="19dp"
    app:layout_constraintLeft_toLeftOf="@+id/desiredGradeInput"
    app:layout_constraintTop_toTopOf="@+id/textView" />

<Button
    android:id="@+id/buttonCalculate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="17dp"
    android:layout_marginEnd="7dp"
    android:onClick="onButtonClick"
    android:text="@string/calculate"
    app:layout_constraintBottom_toTopOf="@+id/textViewExamMarkNeeded"
    app:layout_constraintRight_toRightOf="@+id/textViewExamMarkNeeded"
    tools:layout_constraintBottom_creator="1"
    tools:layout_constraintRight_creator="1" />

logcat的

12-17 21:14:05.840 18312-18312/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.managergmail.time.finite.finitemanager02, PID: 18312
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.managergmail.time.finite.finitemanager02/com.managergmail.time.finite.finitemanager02.MainActivity}: java.lang.NumberFormatException: Invalid float: ""
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647)
                                                   at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)
                                                   at android.os.Handler.dispatchMessage(Handler.java:111)
                                                   at android.os.Looper.loop(Looper.java:207)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5763)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
                                                Caused by: java.lang.NumberFormatException: Invalid float: ""
                                                   at java.lang.StringToReal.invalidReal(StringToReal.java:63)
                                                   at java.lang.StringToReal.parseFloat(StringToReal.java:308)
                                                   at java.lang.Float.parseFloat(Float.java:306)
                                                   at java.lang.Float.valueOf(Float.java:343)
                                                   at com.managergmail.time.finite.finitemanager02.MainActivity.onCreate(MainActivity.java:20)
                                                   at android.app.Activity.performCreate(Activity.java:6280)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1116)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647) 
                                                   at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                   at android.os.Looper.loop(Looper.java:207) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:5763) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 

尝试将其添加到您的editext

    final EditText currentGradeInput = (EditText)findViewById(R.id.currentGradeInput);


   currentGradeInput.addTextChangedListener(new TextWatcher() {
       @Override
       public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

       }

       @Override
       public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            currentGradeValue = Float.valueOf(currentGradeInput.getText().toString());
       }

       @Override
       public void afterTextChanged(Editable editable) {

       }
   });

上面的代码将完美运行,而不会引发任何数字格式异常。

看来examMarkNeededValue计算为null 因此,我建议您使用:

String.valueOf(examMarkNeededValue)

代替

Float.toString(examMarkNeededValue)

因为在Float.toString情况下,如果实例为null ,则抛出NullPointerException ,但是在这种情况下, String.valueOf将返回字符串"null" 计算为空,因为您尚未在按钮上使用事件侦听器。

从一开始,您的EditTexts就没有值,因此在onCreate()方法中使用Float.valueOf(currentGradeInput.getText().toString())意味着您将空字符串“”转换为浮点数。 这不可能使您的应用程序崩溃。

在这种情况下,您应在应用程序中具有一个“提交”按钮以获取输入值并进行转换。 在onCreate()中,添加:

Button btnSubmit = findViewById(R.id.btn_button);   
btnSubmit.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        float desiredGradeValue = Float.valueOf(desiredGradeInput.getText().toString());
                        float examWeightValue = Float.valueOf(examWeightInput.getText().toString());
                        textViewExamMarkNeeded.setText((Float.toString(examMarkNeededValue)));
                    }
                }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM