Java 未完成的关闭应用程序

Java 未完成的关闭应用程序,java,android,xml,Java,Android,Xml,当我运行我的应用程序时,我收到一条“停止应用程序”消息,下面是我的代码。请看一看 @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.dublayout); outputFile = Environment.getExternalStorageDirectory().

当我运行我的应用程序时,我收到一条“停止应用程序”消息,下面是我的代码。请看一看

        @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中,它说:

02-05 08:01:09.853:D/OpenGLRenderer(1565):纹理缓存::获取:创建 纹理(0xb87af490):名称、大小、mSize=229216914952402-05 08:01:19.125:E/MediaRecorder(1565):在无效状态下调用停止: 4 02-05 08:01:19.125:带系统错误(1565): java.lang.IllegalStateException 02-05 08:01:19.129: W/System.err(1565):在android.media.MediaRecorder.stop(本机) 方法)02-05 08:01:19.129:带系统错误(1565):在 com.example.mixpad.DubActivity.start(DubActivity.java:136)02-05 08:01:19.129:带系统错误(1565):在 com.example.mixpad.DubActivity$2.onClick(DubActivity.java:99)02-05 08:01:19.129:带系统错误(1565):在 android.view.view.performClick(view.java:4084)02-05 08:01:19.133: 带系统错误(1565):在 android.view.view$PerformClick.run(view.java:16966)02-05 08:01:19.137:W/系统错误(1565):在 handleCallback(Handler.java:615)02-05 08:01:19.137:W/系统错误(1565):在 android.os.Handler.dispatchMessage(Handler.java:92)02-05 08:01:19.141:W/系统错误(1565):在 android.os.Looper.loop(Looper.java:137)02-05 08:01:19.141: 带系统错误(1565):在 android.app.ActivityThread.main(ActivityThread.java:4745)02-05 08:01:19.141:W/系统错误(1565):在 java.lang.reflect.Method.Invokenactive(本机方法)02-05 08:01:19.145:带系统错误(1565):在 java.lang.reflect.Method.invoke(Method.java:511)02-05 08:01:19.145: 带系统错误(1565):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 02-05 08:01:19.145:带系统错误(1565):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)02-05 08:01:19.149:带系统错误(1565):在 dalvik.system.NativeStart.main(本机方法)

有人能帮你的
开始(…)
方法吗

if (recbtn.getText() == getString(R.string.recBtn))
不能使用
==
比较Java中的字符串。您需要使用
等于(…)

您的问题是使用
==
将始终失败,这意味着将始终调用
else
条件和
myRecorder.stop()
将抛出
IllegalStateException
,因为您的
MediaRecorder
从未准备/启动过

把那行改成

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

在rec之前是否按了其他按钮?请发布完整的logcat错误。如果(recbtn.getText().equals(getString(R.string.recbtn)))代码不起作用,但当我替换else时,它起作用