2016-04-08 7 views
0

私は過去3日間この問題を解決するために取り組んでおり、動作させることはできません。 uriを使用しているAndroidメディアプレイヤーがアプリのクラッシュを引き起こします

  • オーディオファイルが追加されたアイテムのリストからデータベース
  • に追加され
  • 選択したオーディオファイルを選択する
  • 選択する

    1. を開き、ファイルブラウザとオーディオファイル:これらは私のアプリのステップでありますファイルが選択されています
    2. 再生ボタンを押してサウンドファイルを再生します
    3. この時点でサウンドファイルが再生されますが、アプリケーションを終了して再び開いて、アプリケーションがクラッシュする同じサウンドファイルを再生しようとしますフォローINGのエラー:

    致命的な例外: 内容:://com.android.providers.media.documents/document/

     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)がメインオーディオ%の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()の場合、何らかの理由でMediaPlayerを作成できない場合はnullを返すことができます。ヌルを返さないことを非常に確信している場合を除き、毎回nullの戻り値をチェックする必要があります(ただし、それでも安全のために行います)。

    create()が呼び出されたときに、作成が失敗した理由についてAndroidが手がかりを残しているかどうかを確認することもできます。

    関連する問題