2014-11-07 4 views
0

Я перечисляю аудиофайлы в ListView и играю, который один пользователь прослушивал, но получая NPE, когда пользователь нажимает на любую другую песню в списке, если уже играет первый ...Получение NPE при нажатии на элемент списка

mediaPlayer = new MediaPlayer(); 

    ............................. 

    listview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long id) {     

       strNURL = videoMovieArrayList.get(position).getUrl().toString();     

       if(mediaPlayer!=null && mediaPlayer.isPlaying()) 
        try { 
         mediaPlayer.stop(); 
         mediaPlayer.release(); 
         } catch (Exception e) { 

         } 
        play(arg1); 
       } 
     }); 


    public void play(View view){   
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // NPE 
     try { 
      mediaPlayer.setDataSource(strNURL); 
     } catch (IllegalArgumentException e) { 
     ............ 
    }); 
    } 

Пожалуйста, проверьте мой Вход ниже, это то, что я получаю, когда делает кран на любом другом элементе списка

LogCat: -

11-07 11:29:03.430: E/MessageQueue-JNI(6092): java.lang.NullPointerException 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.exa.info.MusicTrackActivity.play(MusicTrackActivity.java:240) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.exa.info.MusicTrackActivity$3.onItemClick(MusicTrackActivity.java:187) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.widget.AbsListView.onTouchUp(AbsListView.java:3650) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3429) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.View.dispatchTouchEvent(View.java:7706) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2071) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1518) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.app.Activity.dispatchTouchEvent(Activity.java:2458) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:268) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2019) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.View.dispatchPointerEvent(View.java:7886) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.os.MessageQueue.nativePollOnce(Native Method) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.os.MessageQueue.next(MessageQueue.java:138) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.os.Looper.loop(Looper.java:131) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at android.app.ActivityThread.main(ActivityThread.java:5061) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at java.lang.reflect.Method.invokeNative(Native Method) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at java.lang.reflect.Method.invoke(Method.java:515) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) 
11-07 11:29:03.430: E/MessageQueue-JNI(6092): at dalvik.system.NativeStart.main(Native Method) 
11-07 11:29:03.430: D/AndroidRuntime(6092): Shutting down VM 
+3

Опубликовать Ваш LogCat тогда ...... –

+1

где и создать объект на MediaPlayer –

+0

@MD спасибо я разместил журнал, пожалуйста, проверьте Теперь – Sophie

ответ

2

В примерки уловом, вы делаете mediaPlayer = null;, а затем вызываете метод воспроизведения, где вы пытаетесь установитьAudioStreamType со значением NULL.

Так что NPE произошло.

удалить mediaPlayer = null; с try-catch.

После выпуска() объект больше не доступен.

Итак, создайте mediaPlayer = new MediaPlayer();, а затем вызовите метод воспроизведения.

 mediaPlayer.setDataSource(strNURL)); 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
+0

Я уже пробовал с этим, но получаю такое же исключение – Sophie

+0

как играть в следующую песню после завершения текущей песни? – Sophie

+0

@ Софи, пожалуйста, напишите свой рабочий код :) –

0

Проблема здесь вы можете освободить свой mediaPlayer объект

if(mediaPlayer!=null && mediaPlayer.isPlaying()) 
       try { 
        mediaPlayer.stop(); 
        mediaPlayer.release(); 
        } catch (Exception e) { 

        } 
       play(arg1); 
      } 

и называется методом play(arg1); к следующему, но в это время ваш mediaPlayer объект будет нулевым, так что вы получаете NPE. так просто использовать эту

listview.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
      long id) {     

      strNURL = videoMovieArrayList.get(position).getUrl().toString();     

      if(mediaPlayer!=null) 
       try { 
        play(arg1); 
        } catch (Exception e) { 

        } 

      } 
    });