2012-09-04 197 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. 
}