2014-02-05 249 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