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 秒間記録するとアプリがクラッシュします。クラッシュする部分をどのように解決できますか? 開始と停止に使用しているコードは、このリンクにあります。30秒後にレコーダーを自動的に停止する他の方法はありますか

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)
4

1 に答える 1

1

btnControl.setText("Start");別のスレッドからは使用できません。非同期作業 (記録など) にはASyncTaskonPreExecuteを使用し、メソッドでデータを表示することをお勧めしますonPostExecute

于 2013-04-23T09:59:20.410 に答える