java - 编辑文本到 Int

标签 java android integer android-edittext int

我是 Java 和 Android 开发新手,因此我决定制作一个简单的应用程序,它接受两个字段并将它们放入一个简单的数学方程中。但是,我必须先将 EditText 转换为 Int,然后才能对它们进行任何数学运算,对吗? 在 XML 文件中,我已将两个 EditText 设置为 android:inputType="number"。 我的尝试是这样的:

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

  final EditText height = (EditText) findViewById (R.id.height);
  final int heightInt = Integer.parseInt(height.getText().toString());

我还在这两种情况下尝试了 Integer.valueOf,但当我运行它时它总是强制关闭我的应用程序,如果我注释掉 int heightInt 它不会强制关闭。

这是完整的代码:

package com.body.calculator;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class bmi extends Activity {
     /** Called when the activity is first created. */



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final TextView results = (TextView) findViewById(R.id.results);
    final EditText height = (EditText) findViewById (R.id.height);
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);
    final EditText weight = (EditText) findViewById (R.id.weight);
    final Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    Button submit_bmi = (Button) findViewById(R.id.submit_bmi);
    submit_bmi.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if (height.getText().toString().equals("") && weight.getText().toString().equals("")) {
                results.setText("Both fields are empty");
                vib.vibrate(100);
            }
            else if (height.getText().toString().equals("")) {
                results.setText("Height is empty");
                vib.vibrate(100);
            }
            else if (weight.getText().toString().equals("")) {
                results.setText("Weight is empty");
                vib.vibrate(100);
            }
            else {
            results.setText("");    
            }
        }


    });

}
}

如有任何帮助,我们将不胜感激。 谢谢,阿尔纳尔。

最佳答案

你的做法

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

是正确的,但您直接在 onCreate 方法中调用它。这意味着应用程序一启动,甚至在用户能够执行任何操作之前,它们就会被调用。因此,这些值始终为空,只是因为用户还没有进行任何更改。

当您稍后在 onClick 中使用这些值时(这是正确的),由于其早期初始化,它们仍然为空。

尝试放置这部分:

String heightString = height.getText().toString();
final int heightInt = Integer.parseInt(heightString);

直接在 onClick 方法开始之后但在 if/else 语句之前,如下所示:

public void onClick(View v) {
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);

           // Your statements

  }

关于java - 编辑文本到 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762480/

相关文章:

Java,从链表参数返回链表

java - 如何在生产中引用来自不同子域(或 CDN)的 Assets ?

java - 将pre-json编码的字符串输出到spring框架

Java Weka 按属性拆分实例

c++ - 发送 2 个整数的数组作为参数

java - 未找到原生的实现

android - 如何在Android compose中通过Navigation传递对象?

android - 为交错 GridView 设置下拉刷新

C++ 枚举与 unsigned int 比较

android - 用 Int[] 填充 ImageAdapter