2014-02-05 194 views
0

当我运行我的应用程序时,我不幸停止了应用程序消息,以下是我的代码。请看一下。非关闭应用程序

 @Override 
     public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
      setContentView(R.layout.dublayout); 
    outputFile = Environment.getExternalStorageDirectory(). 
         getAbsolutePath() + "/javacodegeeksRecording.3gpp"; 

       myRecorder = new MediaRecorder(); 
       myRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
       myRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
       myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
       myRecorder.setOutputFile(outputFile); 
       addListenerButton(); 
    } 


     private void addListenerButton() { 
        recbtn = (Button)findViewById(R.id.recbut); 
        recbtn.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          // TODO Auto-generated method stub 
          start(v); 
         } 
        }); 

     } 
public void start(View view){ 
       if (recbtn.getText() == getString(R.string.recBtn)){ 

       try { 
        myRecorder.prepare(); 
        myRecorder.start(); 
        recbtn.setText(getString(R.string.stopBtn)); 
       } catch (IllegalStateException e) { 
        // start:it is called before prepare() 
        // prepare: it is called after start() or before setOutputFormat() 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // prepare() fails 
        e.printStackTrace(); 
       } 

       Toast.makeText(getApplicationContext(), "Start recording...", 
         Toast.LENGTH_SHORT).show(); 
       } 
       else{ 
        try { 
         myRecorder.stop(); 
         myRecorder.release(); 
         myRecorder = null; 
        recbtn.setText(getString(R.string.recBtn)); 
         Toast.makeText(getApplicationContext(), "Stop recording...", 
           Toast.LENGTH_SHORT).show(); 
        } catch (IllegalStateException e) { 
         // it is called before start() 
         e.printStackTrace(); 
        } catch (RuntimeException e) { 
         // no valid audio/video data has been received 
         e.printStackTrace(); 
        } 
       } 
      } 

它不记录我试了一切仍然我不能让它工作抱歉,但我仍然是这种语言的新手。

在logcat的,它说:

8月2日至5日:01:09.853:d/OpenGLRenderer(1565):TextureCache ::获得:创建 质地(0xb87af490):名称,大小,MSIZE = 22 ,9216,9149524 02-05 08:01:19.125:E/MediaRecorder(1565):停止呼叫处于无效状态: 4 02-05 08:01:19.125:W/System.err(1565): java .lang.IllegalStateException 02-05 08:01:19.129: W/System.err(1565):at android.media.MediaRecorder.stop(Native Method)02-05 08:01:19.129:W/System.err (1565):在 com.example.mixpad.DubActivity.start(DubAct ivity.java:136)02-05 08:01:19.129:W/System.err(1565):at com.example.mixpad.DubActivity $ 2.onClick(DubActivity.java:99)02-05 08: 01:19.129:W/System.err(1565):at android.view.View.performClick(View.java:4084)02-05 08:01:19.133: W/System.err(1565):at android.view.View $ PerformClick.run(View.java:16966)02-05 08:01:19.137:W/System.err(1565):at android.os.Handler.handleCallback(Handler.java:615 )02-05 08:01:19.137:W/System.err(1565):at android.os.Handler.dispatchMessage(Handler.java:92)02-05 08:01:19.141:W/System。 err(1565):at android.os.Looper.loop(Looper.java:137)02-05 08:01:19.141: W/System.err(1565):at android.app.ActivityThread.main(ActivityThread.java:4745)02-05 08:01:19.141:W/System.err(1565):at java.lang .reflect.Method.invokeNative(Native Method)02-05 08:01:19.145:W/System.err(1565):at java.lang.reflect.Method.invoke(Method.java:511)02-05 08:01:19.145: W/System.err(1565):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) 02-05 08:01:19.145:W/System.err(1565):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-05 08:01:19.149:W/System.err(1565):at dalvik。 system.NativeStart.main(Native Method)

任何人都可以帮助请

+0

你在录制前,按其他按钮? – stinepike

+0

请发布您的完整logcat错误。 – GrIsHu

+0

我已经编辑它 – user3221836

回答

0

在你start(...)方法...

if (recbtn.getText() == getString(R.string.recBtn)) 

不能在Java中使用==比较字符串。您需要使用equals(...)

你的问题是使用==总是会失败,这意味着else条件总是被调用,myRecorder.stop();将抛出从未准备IllegalStateException为您MediaRecorder /启动。

更改该行...

if (recbtn.getText().equals(getString(R.string.recBtn))) 
+0

代码如果(recbtn.getText()。等于(getString(R.string.recBtn)))不工作,但当ireplace其他工作 – user3221836