2015-06-10 5 views
0

Мне нужно записать звук с устройства Android. Начало записи работает нормально, но я не могу остановить запись звука. Я получаю ошибку исключения нулевого указателя. Я обращаюсь к start() и stop() от других классов. Когда я использую метод stop, запись имеет значение NULL.Исключение Null Pointer при остановке аудиозаписей

Вот мой аудио класс

private String getFilename(){ 
     String filepath = Environment.getExternalStorageDirectory().getPath(); 
     File file = new File(filepath,AUDIO_RECORDER_FOLDER); 

     if(!file.exists()){ 
       file.mkdirs(); 
     } 

     return (file.getAbsolutePath() + "/Questionnair_" + System.currentTimeMillis() + file_exts[currentFormat]); 
} 
     public String startRecording(){ 

       recorder = new MediaRecorder(); 
       recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); 
       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 


       recorder.setOutputFile(getFilename()); 
       recorder.setOnErrorListener(errorListener); 
       recorder.setOnInfoListener(infoListener); 



     try { 
       recorder.prepare(); 
       recorder.start(); 
       //dbstore(getFilename()); 






     } catch (IllegalStateException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 



} 
    private MediaRecorder.OnErrorListener errorListener = new  MediaRecorder.OnErrorListener() { 
      @Override 
      public void onError(MediaRecorder mr, int what, int extra) { 
       AppLog.logString("Error: " + what + ", " + extra); 
     } 
}; 


public static Context getAppContext() 
{ 
return Audio.context; 
} 
private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() { 
     @Override 
     public void onInfo(MediaRecorder mr, int what, int extra) { 
       AppLog.logString("Warning: " + what + ", " + extra); 
     } 
}; 




     public void stopRecording(View v) { 
      // TODO Auto-generated method stub 
      System.out.println("stoping"); 


       try { 

        if (null != recorder) { 
         System.out.println("recrder is null"); 

        recorder.stop(); 
        recorder.release(); 
        recorder = null; 

        } 

       } catch (IllegalStateException e) { 
        // it is called before start() 


        e.printStackTrace(); 
       } catch (RuntimeException e) { 
        // no valid audio/video data has been received 
        e.printStackTrace(); 
       } 
     } 

Вот код, как я доступ к методам

new Audio().startRecording(); 
new Audio().stopRecording();  

Как исправить эту проблему для остановки записи звука

+0

Можете ли вы показать больше своего кода – Abhishek

+0

есть полный класс аудио и метод вызова кода.Что вы хотите больше? –

+0

проблема поиска между методом stopRecording, тем, что вы вызываете, и тем, что вы реализовали [с параметром просмотра], пожалуйста, проверьте. Кстати, не вызывайте stopRecording с новым экземпляром вашего класса аудио, используйте тот же экземпляр, с которым вы вызываете метод start – Abhishek

ответ

1

Вы должны сделать что-то вроде :

private Audio mAudio; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mAudio = new Audio(); 
    mAudio.startRecording();    

} 

public void stopRecording(){ 

    if(mAudio != null){ 

     mAudio.stopRecording(); 

    } 

} 
Смежные вопросы