[英]parseInt causes android app to crash
我最终希望将这个程序变成频率可调的闪光灯。 但是,现在我只是试图让基础知识得以解决。 每次我使用parseInt应用程序崩溃。 在这段代码中,我在strobe()方法中使用它,但我尝试在其他地方使用它。 我也尝试用它来创建一个变量。 它们都以相同的结果结束(应用程序崩溃)。 谁能解释为什么会这样?
EditText box1, box2;
Button toggle;
int firstNum;
String string1;
Camera cam;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
makeVariables();
toggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
strobe();
}
});
}
private void makeVariables(){
box1 = (EditText)findViewById(R.id.editText1);
box2 = (EditText)findViewById(R.id.editText2);
string1 = box1.toString();
string2 = box2.toString();
toggle = (Button)findViewById(R.id.button1);
}
private void turnOnLight(){
cam = Camera.open();
Parameters params = cam.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(params);
cam.startPreview();
cam.autoFocus(new AutoFocusCallback(){
public void onAutoFocus(boolean success, Camera camera) {
}
});
}
private void turnOffLight(){
cam.stopPreview();
cam.release();
}
private void strobe(){
Thread timer = new Thread(){
public void run(){
turnOnLight();
try{
sleep(Integer.ParseInt(box1.toString()));
}catch(InterruptedException e){
e.printStackTrace();
}finally{
turnOffLight();
}
}
};
timer.start();
}
}
你想要box1.getText()
,而不是box1.toString()
。
来自toString()上的Android文档 :
默认实现等效于以下表达式:
getClass().getName() + '@' + Integer.toHexString(hashCode())
这将(显然)不会返回可以解析为Integer的内容,从而创建NumberFormatException。
如果输入字段为空,或者不是数字,则需要处理发生的NumberFormatException。
你也应该使用getText()而不是toString()。 toString()方法通常会返回类似“EditText @ 70AF5”的内容,这会导致未被捕获的NumberFormatException,并最终导致您的应用崩溃。
try {
sleep(Integer.parseInt(box1.getText()));
} catch (NumberFormatException e) {
// do something else, or nothing at all.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.