2012-09-04 198 views
3

我最终希望将此程序变成带可调频率的闪光灯。不过,现在我只是试图让基础知识解决。每当我使用parseInt 该应用程序崩溃。在这段代码中,我在strobe()方法中使用它,但是我尝试过在其他地方使用它。我也试图用它来创建一个变量。它们都以相同的结果结束(应用程序崩溃)。谁能解释为什么会发生这种情况?parseInt导致Android应用程序崩溃

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(); 
} 

}

+0

您是否尝试在调试器中运行它? – casablanca

回答

2

你想box1.getText(),不box1.toString()


Android docs on toString()

默认实现等效于下面的表达式:

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

这将(显然)不会返回的东西,可以被解析到一个整数,从而创建您的NumberFormatException。

0

您需要处理在输入字段为空或不是数字时发生的NumberFormatException。

另外你应该使用getText()而不是toString()。 toString()方法通常返回类似于“EditText @ 70AF5”的东西,这会导致未捕获的NumberFormatException,并最终导致应用程序崩溃。

try { 
    sleep(Integer.parseInt(box1.getText())); 
} catch (NumberFormatException e) { 
    // do something else, or nothing at all. 
}