3

私は最終的に、このプログラムを調整可能な周波数のストロボライトに変えたいと思っています。とはいえ、今は基礎を固めようとしているところです。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();
}

}

4

2 に答える 2

2

あなたがしたいbox1.getText()、ではありませんbox1.toString()


toString()の Android ドキュメントから:

デフォルトの実装は、次の式と同等です。

getClass().getName() + '@' + Integer.toHexString(hashCode())

これは(明らかに)整数に解析できるものを返さないため、NumberFormatExceptionが作成されます。

于 2012-09-04T03:57:09.767 に答える
0

入力フィールドが空の場合、または数値でない場合に発生する NumberFormatException を処理する必要があります。

また、toString() ではなく getText() を使用する必要があります。通常、toString() メソッドは "EditText@70AF5" のようなものを返します。これにより、キャッチされない NumberFormatException が発生し、最終的にアプリがクラッシュします。

try {
    sleep(Integer.parseInt(box1.getText()));
} catch (NumberFormatException e) {
  // do something else, or nothing at all.
}
于 2012-09-04T03:57:23.307 に答える