2013-04-23 242 views
0
mRecorder.prepare(); 
mRecorder.start(); 
Thread auto_stop=new Thread(new Runnable() 
{ 

@Override 
public void run() { 
    try { 
     Thread.sleep(30000); 
     if(WavAudioRecorder.flag) 
     { 
      mRecorder.stop(); 
      mRecorder.reset(); 
      btnControl.setText("Start"); 
      return ; 

     } 
    } catch (InterruptedException e) { 

      //e.printStackTrace(); 
    } 

} 

}); 
auto_stop.start(); 

我試圖做一個記錄器應用程序,記錄30秒,並停止。我使用上面提到的代碼停止記錄器。該應用程序在錄製30秒後崩潰。如何崩潰的部分得到解決? 我用於啓動和停止的代碼是link。秒應用程序在錄製後崩潰

04-23 09:53:34.955: E/AndroidRuntime(4278): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.checkForRelayout(TextView.java:6313) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3567) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3425) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3400) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at com.example.androidwaverecorder.MainActivity$1$1.run(MainActivity.java:53) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at java.lang.Thread.run(Thread.java:856) 
+0

你可以使用處理程序... – Triode 2013-04-23 09:47:06

+0

我只是一個初學者,所以請你能詳細告訴我 – 2013-04-23 09:48:04

+0

從logcat stacktrace請嗎? – 2013-04-23 09:49:34

回答

1

是否有任何其他的方式來停止記錄30後自動您不能從另一個線程使用btnControl.setText("Start");。我建議您使用ASyncTask進行異步工作(如您的錄製)並在onPreExecuteonPostExecute方法中顯示數據。

+0

can你只是解釋什麼是preExecute和postExecute – 2013-04-23 10:05:32

+0

它會正常工作,如果我刪除該聲明? – 2013-04-24 07:55:35

+0

你試過了嗎? – Axarydax 2013-04-24 09:59:49