Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有内部文件的MediaPlayer_Java_Android - Fatal编程技术网

Java 带有内部文件的MediaPlayer

Java 带有内部文件的MediaPlayer,java,android,Java,Android,我试图从内部存储器中选择一个音频文件,然后从中创建一个媒体播放器 public void openPressed(View view) { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.INTERNAL_CONTENT_URI); startActivityForResult(intent, 1); } @Override protected void onActivityResult

我试图从内部存储器中选择一个音频文件,然后从中创建一个媒体播放器

public void openPressed(View view) {
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.INTERNAL_CONTENT_URI);
    startActivityForResult(intent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (data != null) {
        MediaPlayer player = MediaPlayer.create(this, data.getData());
        player.start();
    }
}
所有这些都在我的主要活动中,但在选择文件后,应用程序崩溃

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/audio/media/29 }} to activity {com.malik.mixtape/com.malik.mixtape.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3539)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582)
            at android.app.ActivityThread.access$1300(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            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:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
            at com.malik.mixtape.MainActivity.onActivityResult(MainActivity.java:65)
            at android.app.Activity.dispatchActivityResult(Activity.java:6135)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3535)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582)
            at android.app.ActivityThread.access$1300(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            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:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

尝试这样做,我假设data.getData()返回文件的路径

 MediaPlayer player = new MediaPlayer();
    player.setOnPreparedListener(mPreparedListener);

    player.setDataSource(MyActivity.this, Uri.fromFile(new File(data.getData())));


  MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() 
  {
      /** Called when MediaPlayer is ready */
      public void onPrepared(MediaPlayer player) 
      {
        player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);    
        player.start();
      }
  }; 

错误说明了什么?(Logcat中的错误)以下是错误。那么,为什么您的程序试图对空对象引用调用虚拟方法“void android.media.MediaPlayer.start()”?它是如何为空的?我从内部文件的URI创建了它。它显然是空的,因为你通过调用一个方法得到了一个NullPointerException…不,它返回一个URI,所以你不需要所有的强制转换。除此之外,我也尝试过同样的结果。没有成功。我调用它从本地存储播放视频文件,唯一的区别是我使用OnPrepared listener调用start,因为准备视频需要一段时间,建议使用它。所以我不确定为什么它不能在音频文件上工作。我将使用onPrepared Listener修改代码。我不明白意图有什么问题。什么时候打电话?