0

이미지를 스 와이프 할 수있는 앱을 만들었고 터치 한 모든 이미지가 사운드를 재생합니다. 음, 그리고 나서 NullPointerException에 약간의 문제가 있습니다. 가장 좋은 점은 처음 몇 번 클릭하면 실제로 소리가납니다. 어쩌면 당신은 무슨 일이 일어날 지 알 것입니다. 무료로,ViewPagerAdapter의 MediaPlayer에서 NullPointerException이 발생했습니다.

MediaPlayer를 함께 할 때 호출해야 릴리스() : 문서에 따르면

01-10 21:12:02.964: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:03.534: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:03.634: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:03.654: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:05.004: W/MediaPlayer(12987): info/warning (1, 902) 
01-10 21:12:05.004: I/MediaPlayer(12987): Info (1,902) 
01-10 21:12:05.874: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:06.084: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:06.754: W/MediaPlayer(12987): info/warning (1, 902) 
01-10 21:12:06.754: I/MediaPlayer(12987): Info (1,902) 
01-10 21:12:08.434: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:08.594: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:08.944: W/MediaPlayer(12987): info/warning (1, 902) 
01-10 21:12:08.944: I/MediaPlayer(12987): Info (1,902) 
01-10 21:12:10.554: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:10.674: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:11.694: W/MediaPlayer(12987): info/warning (1, 902) 
01-10 21:12:11.694: I/MediaPlayer(12987): Info (1,902) 
01-10 21:12:12.604: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:12.764: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:12.874: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:12.874: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:14.134: W/MediaPlayer(12987): info/warning (1, 902) 
01-10 21:12:14.134: I/MediaPlayer(12987): Info (1,902) 
01-10 21:12:15.174: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:15.324: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:15.834: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:15.844: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:17.884: W/MediaPlayer(12987): info/warning (1, 26) 
01-10 21:12:17.884: E/MediaPlayer(12987): error (1, -17) 
01-10 21:12:17.914: D/MediaPlayer(12987): create failed: 
01-10 21:12:17.914: D/MediaPlayer(12987): java.io.IOException: Prepare failed.:  status=0x1 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.media.MediaPlayer.prepare(Native Method) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.media.MediaPlayer.create(MediaPlayer.java:674) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.example.gunsounds.ViewPagerAdapter.instantiateItem(ViewPagerAdapter.java:66) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager.populate(ViewPager.java:1048) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1761) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1896) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:851) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:871) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:871) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:871) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:871) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.app.Activity.dispatchTouchEvent(Activity.java:2093) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.view.ViewRoot.handleMessage(ViewRoot.java:1802) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.os.Looper.loop(Looper.java:143) 
01-10 21:12:17.914: D/MediaPlayer(12987): at android.app.ActivityThread.main(ActivityThread.java:4914) 
01-10 21:12:17.914: D/MediaPlayer(12987): at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 21:12:17.914: D/MediaPlayer(12987): at java.lang.reflect.Method.invoke(Method.java:521) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
01-10 21:12:17.914: D/MediaPlayer(12987): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
01-10 21:12:17.914: D/MediaPlayer(12987): at dalvik.system.NativeStart.main(Native Method) 
01-10 21:12:17.954: I/MediaPlayer(12987): Info (1,26) 
01-10 21:12:18.024: W/MediaPlayer(12987): info/warning (1, 44) 
01-10 21:12:18.024: I/MediaPlayer(12987): Info (1,44) 
01-10 21:12:19.204: D/AndroidRuntime(12987): Shutting down VM 
01-10 21:12:19.204: W/dalvikvm(12987): threadid=1: thread exiting with uncaught exception (group=0x40028a00) 
01-10 21:12:19.224: E/AndroidRuntime(12987): FATAL EXCEPTION: main 
01-10 21:12:19.224: E/AndroidRuntime(12987): java.lang.NullPointerException 
01-10 21:12:19.224: E/AndroidRuntime(12987): at com.example.gunsounds.ViewPagerAdapter$1.onClick(ViewPagerAdapter.java:73) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.view.View.performClick(View.java:2408) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.view.View$PerformClick.run(View.java:8817) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.os.Handler.handleCallback(Handler.java:587) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.os.Looper.loop(Looper.java:143) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at android.app.ActivityThread.main(ActivityThread.java:4914) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at java.lang.reflect.Method.invoke(Method.java:521) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
01-10 21:12:19.224: E/AndroidRuntime(12987): at dalvik.system.NativeStart.main(Native Method) 
+0

오류가 발생한 cpde 부분이 게시되지 않았습니다. – Aashir

+0

@Aashir 업데이트 –

+0

이제 LogCat을 실제 문제를 지적한대로 업데이트하십시오. –

답변

1

:

public class ViewPagerAdapter extends PagerAdapter { 
// Declare Variables 
Context context; 
String[] rank;; 
int[] gun; 
int[] sounds; 
LayoutInflater inflater; 
MediaPlayer mediaPlayer; 

public ViewPagerAdapter(Context context, String[] rank, int[] gun, int[] sounds) { 
    this.context = context; 
    this.rank = rank; 
    this.sounds = sounds; 
    this.gun = gun; 
} 

@Override 
public int getCount() { 
    return rank.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((RelativeLayout) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, final int position) { 

    // Declare Variables 
    final ImageView imggun; 


    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = inflater.inflate(R.layout.viewpager_item, container, 
      false); 

    // Locate the ImageView in viewpager_item.xml 
    imggun = (ImageView) itemView.findViewById(R.id.gun); 
    // Capture position and set to the ImageView 
    imggun.setImageResource(gun[position]); 

    // Add viewpager_item.xml to ViewPager 
    ((ViewPager) container).addView(itemView); 

    int file = sounds[position]; 
    final MediaPlayer mp = MediaPlayer.create(context, file); 

    imggun.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      mp.start(); 

     } 
    }); 

    return itemView; 
} 

protected Context getApplicationContext() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    // Remove viewpager_item.xml from ViewPager 
    ((ViewPager) container).removeView((RelativeLayout) object); 
    mediaPlayer.release(); 
} 
} 

및 로그 캣 :

코드는 다음과 같습니다 자원. 공개되지 않으면 너무 많은 MediaPlayer 인스턴스가 예외가됩니다.

http://developer.android.com/reference/android/media/MediaPlayer.html#create(android.content.Context, int)를

그러나 코드에서 당신은 당신의 MediaPlayer를 해제하지 않습니다. 당신의 destroyItem 방법에서 ...

를 사용하면 객체 mediaPlayer를 해제하고 있지만이 초기화되지 않았다 그래서 어쩌면 당신이 시도 할 수 :

당신의 instantiateItem에 :

View itemView = inflater.inflate(R.layout.viewpager_item, container, 
      false); 
// what you need to do 

itemView.setTag(mp); 
return itemView; 

destroyItem 당신에게로 :

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    // Remove viewpager_item.xml from ViewPager 
    RelativeLayout layout = (RelativeLayout) object; 
    MediaPlayer mp = (MediaPlayer)layout.getTag(); 
    mp.release(); 
    ((ViewPager) container).removeView(layout); 

} 

아직 크래시가 발생하면 MediaPlayer의 생성을 살펴보면 결과가 발생할 수 있습니다. Create() 메서드에 전달 된 int가 올바른 리소스가 아닌 경우 null 개체입니다.

+0

나는 getter와 setter의 로직을 얻지 못한다.하지만 MAN은 - CHARM처럼 작동한다! 나는 사용자가하는 것보다 빠른 동작을하더라도 지금은 충돌 할 수 없습니다. 고마워요! –

관련 문제