我正在尝试制作一个简单的功能,用户插入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;
}
答案 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
中添加inputType
和EditText
属性。 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();
}
}
});
}