仅在EditText

时间:2017-11-14 10:01:56

标签: java android validation

我正在尝试制作一个简单的功能,用户插入2个数字和一个吐司提供总和... 首先,为了做到这一点,我想验证用户只插入数字。如果没有,我想设置土司消息(错误)解释只有数字允许在这里。我使用boolean isdigit(EditText输入)方法。 但是,我得到一个错误 - 因为for循环不能接受null?

public class MainActivity extends AppCompatActivity {
private EditText firstIntCB, secundIntCB;
private Button getProductCB;

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

    addDataToDisplay();
}

public void addDataToDisplay() {
   if (isdigit(firstIntCB)==true && isdigit(secundIntCB)==true){
        firstIntCB = (EditText)findViewById(R.id.firstNumber);
        secundIntCB = (EditText)findViewById(R.id.secundNumber);
        getProductCB =(Button)findViewById(R.id.GetProduct);

        getProductCB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Integer intFirst = Integer.parseInt(firstIntCB.getText().toString());
                Integer intSec = Integer.parseInt(secundIntCB.getText().toString());
                String product = Integer.toString((int)Math.pow(intFirst,intSec));
                Toast.makeText
                        (getApplicationContext(),String.valueOf(product), Toast.LENGTH_LONG).show();
            }
        });
    }
}

public boolean isdigit(EditText input) {
    String data=input.getText().toString().trim();
    for(int i=0;i<data.length();i++)
    {
        if (!Character.isDigit(data.charAt(i)))
            return false;

    }
    return true;
}

4 个答案:

答案 0 :(得分:2)

尝试使用 android:inputType="number"  Editext的属性,只允许数字作为Editext

中的输入输入
<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"/>

有关详情,请参阅 default textual representation

并在onCreate()

中绑定您的控件
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    firstIntCB = (EditText)findViewById(R.id.firstNumber);
    secundIntCB = (EditText)findViewById(R.id.secundNumber);
    getProductCB =(Button)findViewById(R.id.GetProduct);

    addDataToDisplay();
}

答案 1 :(得分:2)

digits中添加inputTypeEditText属性。 digits属性允许用户在EditText中输入特定字符,因此您无需添加过滤器。

     <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:digits="0123456789"/>

您需要在使用之前初始化EditText,

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

    firstIntCB = (EditText)findViewById(R.id.firstNumber);
    secundIntCB = (EditText)findViewById(R.id.secundNumber);
    getProductCB =(Button)findViewById(R.id.GetProduct);

    addDataToDisplay();
}

答案 2 :(得分:0)

你犯了一个错误......你应该findViewById onCreate然后做其他事情。

编译器尝试解析if condition,但您没有定义编辑文本。

所以:

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

    firstIntCB = (EditText)findViewById(R.id.firstNumber);
    secundIntCB = (EditText)findViewById(R.id.secundNumber);
    getProductCB =(Button)findViewById(R.id.GetProduct);


addDataToDisplay();
}

然后将android:inputType="number"放入编辑文本xml

我希望这对你有用

答案 3 :(得分:0)

更改你的addDataToDisplay();像这样的方法

public void addDataToDisplay() {
    firstIntCB = (EditText)findViewById(R.id.firstNumber);
    secundIntCB = (EditText)findViewById(R.id.secundNumber);
    getProductCB =(Button)findViewById(R.id.GetProduct);

        getProductCB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isdigit(firstIntCB)==true && isdigit(secundIntCB)==true) {
                    Integer intFirst = Integer.parseInt(firstIntCB.getText().toString());
                    Integer intSec = Integer.parseInt(secundIntCB.getText().toString());
                    String product = Integer.toString((int) Math.pow(intFirst, intSec));
                    Toast.makeText
                            (getApplicationContext(), String.valueOf(product), Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(getApplicationContext(),"Enter values", Toast.LENGTH_LONG).show();
                }
            }
        });

}