2016-04-08 2 views
0

Я работаю над решением этой проблемы в течение последних трех дней и не могу получить работу. Эти шаги моего приложения:Android-посредник с использованием uri вызывает крах приложения

  1. Открыть браузер файлов для выбора и аудио файлов
  2. Звуковой файл выбран
  3. Выбранный звуковой файл будет добавлен в базу данных
  4. из списка элементов добавленной файл выбран
  5. кнопка воспроизведения нажата для воспроизведения звукового файла
  6. В этот момент будет воспроизводиться звуковой файл, однако, если я закрою приложение, затем откройте его снова и попытайтесь воспроизвести тот же самый звуковой файл, следовать ошибка ING:

FATAL ИСКЛЮЧЕНИЕ: главный

 Process: com.arcitech.developer.ultimatesoundboard, PID: 22967 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference 
     at com.arcitech.developer.ultimatesoundboard.activities.ItemDetailFragment$4.onClick(ItemDetailFragment.java:153) 
     at android.view.View.performClick(View.java:5156) 
     at android.view.View$PerformClick.run(View.java:20755) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5835) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

Путь к файлу (URI) Я спасаю к базе данных: Содержание: //com.android.providers.media.documents/document/ аудио% 3A15790

и код, я использую расположен в onCreateView фрагмента:

MediaPlayer m; 
playSound.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) {     
     if (m != null) { 
      m.stop(); 
      m.release(); 
      m = null; 
     } 
     m = MediaPlayer.create(getActivity(), Uri.parse(mItem.filePath)); 
     m.start(); 
     m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer m) { 
      countdownTimerHandler.removeCallbacks(countdownTimerRunnable); 
     } 
    }); 
    } 
}); 
+0

Ваш MediaPlayer не инициализирован. Посмотрите на это: http://stackoverflow.com/questions/7882851/mediaplayer-create-always-returns-null –

+0

Спасибо, но это не решение моей проблемы, ссылка, которую вы мне отправили, была связана с поврежденным файлом, файл, который я использую, не поврежден. Мой медиаплеер инициализирован. на самом деле мой код ничем не отличается от ссылки, которую вы мне отправили !. Однако спасибо за совет и вернусь так быстро. – user2029541

ответ

0

Согласно doc для MediaPlayer.create(), он может вернуть значение null, если по какой-либо причине MediaPlayer не может быть создан. Вы должны проверять возвращаемое значение для null каждый раз, если вы не уверены в том, что он не вернет null (но даже тогда, сделайте это для безопасности).

Вы также можете проверить журнал в то время, когда вызывается вызов create(), чтобы узнать, не оставляет ли Android никаких подсказок относительно того, почему создание не удалось.

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