2017-09-16 19 views
0

으로 런타임 오류가 발생했습니다. 내 로그 고양이 오류가 발생하지만이 핸들러 및 루퍼 오류가 발생하지 않으며 여러 가지 사항을 시도했습니다.바운드 예외 예외 배열

dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot)); 

하지만 - Array Out Of BoundException의 오류가 라인 (38)가,

09-16 10:53:25.326 10063-10063/? E/AndroidRuntime: FATAL EXCEPTION: main 
                Process: com.example.admin.myapplication, PID: 10063 
                java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.admin.myapplication/com.example.admin.myapplication.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483) 
                 at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 
                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                 at android.os.Looper.loop(Looper.java:148) 
                 at android.app.ActivityThread.main(ActivityThread.java:5438) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 
                Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
                 at com.example.admin.myapplication.MainActivity.onCreate(MainActivity.java:38) 
                 at android.app.Activity.performCreate(Activity.java:6303) 
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)  
                 at android.app.ActivityThread.access$900(ActivityThread.java:153)  
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)  
                 at android.os.Handler.dispatchMessage(Handler.java:102)  
                 at android.os.Looper.loop(Looper.java:148)  
                 at android.app.ActivityThread.main(ActivityThread.java:5438)  
                 at java.lang.reflect.Method.invoke(Native Method)  
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)  
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)  09-16 10:53:25.332 10063-10063/? I/Process: Sending signal. PID: 10063 SIG: 9 

내 MainActivity.class는 또한

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    slideDotspanel = (LinearLayout) findViewById(R.id.SliderDots); 
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this); 
    viewPager.setAdapter(viewPagerAdapter); 
    dotscount = viewPagerAdapter.getCount(); 
    dots = new ImageView[dotscount]; 
    for (int i = 0; i < dotscount; i++) { 
     dots[i] = new ImageView(this); 
     dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.unactive_dot)); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     params.setMargins(8, 0, 8, 0); 
     slideDotspanel.addView(dots[i], params); 
    } 

    dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot)); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new MyTimerTask(), 2000, 4000); 

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
              @Override 
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

              } 

              @Override 
              public void onPageSelected(int position) { 
               for (int i = 0; i < dotscount; i++) { 
                dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.unactive_dot 
               )); 

               } 
               dots[position].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot)); 

              } 


              @Override 
              public void onPageScrollStateChanged(int state) { 

              } 
             } 

    ); 

} 

public class MyTimerTask extends TimerTask { 
    public void run() { 
     MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 


       if (viewPager.getCurrentItem() == 0) 

       { 
        viewPager.setCurrentItem(1); 

       } else if (viewPager.getCurrentItem() == 1) 

       { 
        viewPager.setCurrentItem(2); 
       } else 
        viewPager.setCurrentItem(0); 
      } 
     }); 

    } 
}` 

입니다 :이 프로그램은 자동으로 이미지를 슬라이드보기 호출기를 사용하기위한 것입니다 그것을 얻지 못하는 건 어떻게 배열 아웃 바운드 예외입니다. 친절하게 도와주세요.

이 문제에 대한 귀하의 도움과 협조에 진심으로 감사드립니다.

답변

1

문제는이 코드에서 아마도 :

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this); 
viewPager.setAdapter(viewPagerAdapter); 
dotscount = viewPagerAdapter.getCount(); 
dots = new ImageView[dotscount]; 

당신은 당신의 ViewPagerAdapter 클래스가 작동 여부되어 있는지 확인해야합니다. 그런 다음 viewPagerAdapter.getCount();이 어댑터 항목의 올바른 크기를 반환하는지 확인하십시오. 이는 IDE에서 자동 생성 코드 기능을 사용하는 경우 일반적으로 return 0입니다. 다음과 같이 입력하십시오 :

@Override 
public int getCount() { 
    return 0; // This is wrong! 
} 

따라서 항목 크기를 반환해야합니다.

+0

감사합니다. :) 나는 아침 이후로 찾으려고했습니다. – RedEyes

+0

대단히 환영합니다.) –