2016-04-08 5 views
0

Ich habe gearbeitet, um dieses Problem für die letzten drei Tage zu lösen und kann es nicht funktionieren. Dies sind die Schritte meiner App:Android Mediaplayer mit Uri verursacht App Absturz

  1. öffnen Dateibrowser auswählen und Audiodatei
  2. Tondatei
  3. Ausgewählte Audiodatei ausgewählt wird, wird zu der Datenbank
  4. aus einer Liste von Elementen der addierte Datei ist ausgewählt
  5. eine Wiedergabe-Taste gedrückt wird, um die Sound-Datei
  6. an diesem Punkt die Sounddatei wird abgespielt, aber wenn ich die App schließe dann öffne sie erneut und versuche, die gleiche Sound-Datei die App stürzt mit zu spielen das folgende ing Fehler:

FATAL AUSNAHME: Haupt

 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) 

die Filepath (uri) ich in die Datenbank speichere ist: Inhalt: //com.android.providers.media.documents/document/ Audio-% 3A15790

und der Code I befindet sich im onCreateView eines Fragments bin mit:

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

Ihr MediaPlayer ist nicht initialisiert. Schau dir das an: http://stackoverflow.com/questions/7882851/mediaplayer-create-always-returns-null –

+0

Danke, aber das ist nicht die Lösung für mein Problem, der Link, den du mir geschickt hast, war auf eine beschädigte Datei zurückzuführen Die Datei, die ich verwende, ist nicht beschädigt. Mein Media Player ist initialisiert. in der Tat ist mein Code nicht anders als der Link, den Sie mir geschickt haben! Aber danke für deinen Rat und komm so schnell zurück. – user2029541

Antwort

0

nach der doc für MediaPlayer.create(), es kann null zurückgeben, wenn aus irgendeinem Grund MediaPlayer nicht erstellt werden kann. Sie sollten den Rückgabewert jedes Mal auf Null überprüfen, es sei denn, Sie sind sehr zuversichtlich, dass es keinen Nullwert zurückgibt (aber selbst dann, wenn Sie es aus Sicherheitsgründen tun).

Sie können auch das Protokoll überprüfen, wenn create() aufgerufen wird, um zu sehen, ob Android Hinweise darauf gibt, warum die Erstellung fehlgeschlagen ist.