1

我試圖從片段中的用戶的音樂文件夾中獲取音樂文件,但是當我這樣做,並在onActivityResult(並記錄它)接收它後,我得到一個Nullpointer異常,當我想與mediaplayer播放它。 挑文件中的代碼:Nullpointer Exception「void android.media.MediaPlayer.setDataSource(android.content.Context,android.net.Uri)」

Button pickFile = (Button) v.findViewById(R.id.btnpick); 
    pickFile.setOnClickListener(new OnClickListener() { 

    @Override 
     public void onClick(View v) { 
     Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(intent, 1); 
     } 
    }); 

OnActivityResult(不要忘記,我在一個片段)

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    getActivity(); 
    if ((resultCode == getActivity().RESULT_OK) && (data != null)) { 
    Log.d("result", "okreceived"); 
    Uri soundUri = Uri.parse(data.getData().toString()); 
    Log.i("result", "Intent data " + data.getData().toString()); 
    mplayergo(soundUri); 
     } 
    if (resultCode == getActivity().RESULT_CANCELED) 
    { 
    //null 
    } 
     } 

     public void mplayergo(Uri soundUri){ 
      try { 
       mplayer.setDataSource(getActivity(), soundUri); 
       mplayer.start(); 
      } catch (IOException e) { 
       e.printStackTrace(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 

這裏的日誌:

d /結果:okreceived我/結果:意圖數據內容:// media/external/audio/media/34839 W/System.err:java.lang.NullPointerException:嘗試調用虛方法void android.media.MediaPlayer.setDataSource(android.content.Context ,com.package.example.GameFragm上的null對象引用ent.mplayergo(GameFragment.java:764)at com.package.example.GameFragment.onActivityResult(GameFragment.java:748)W/System.err:at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java: W/System.err:at android.app.Activity.dispatchActivityResult(Activity.java:6290)W/System.err:at android.app.ActivityThread.deliverResults(ActivityThread.java:3606)W/System.err:在android.app.ActivityThread.handleSendResult(ActivityThread.java:3653)W/System.err:在android.app.ActivityThread.access $ 1400(ActivityThread.java:154)W/System.err:在android.app.ActivityThread $ H./handleMessage(ActivityThread.java:1371)W/System.err:在android.os.Handler.dispatchMessage(Handler.java:102)W/System.err:在android.os.Looper.loop(Looper.java: 135)W/System.err:在android.app.ActivityThread.main(ActivityThread.java:5300)W/System.err:在java.lang.reflect.Method.invoke(本地方法)W/System.err:at java.lang.reflect.Method.invoke(Method.java:372)W/System.err:at com.a ndroid.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:904)W/System.err的:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

解決了重 - 初始化MediaPlayer並將uri設置爲源。

+0

你初始化了你的MediaPlayer類嗎? – Ajinkya

+0

是的,它已經被初始化,並且在除了這裏以外的片段中都能正常工作,或者也許我需要再次初始化它,因爲我正在修改流? – Spidersaw

+0

然後檢查getActivity()它是空的,我認爲。 – Ajinkya

回答

5

「mplayer」未初始化。所以當你試圖調用「setDataSource」方法時,它會得到空指針異常。嘗試在調用該方法之前初始化「mplayer」。

+0

是的,我不得不重新初始化它,現在它的工作原理,謝謝:) – Spidersaw

+0

我有同樣的問題!這對我有用!感謝名單! –