2017-09-16 139 views
0

我的日誌貓錯誤是這樣的,但我沒有得到這個處理程序和循環錯誤,我也嘗試了各種各樣的東西。這個程序是使用視圖尋呼機自動滑動的圖像:我面臨數組越界的運行時錯誤異常

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); 
      } 
     }); 

    } 
}` 

此外,還有的Array Out Of BoundException錯誤行38 -

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

但我我沒有得到它如何有數組超出限制例外。請幫助。

非常感謝您在這件事上的時間和協助。

回答

1

的問題可能是從這個代碼:

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

你需要檢查,如果你的ViewPagerAdapter類工作或沒有。然後檢查viewPagerAdapter.getCount();是否爲適配器項返回了正確的大小,因爲如果您在IDE中使用自動生成的代碼功能,通常是返回0。類似這樣的:

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

所以,你需要返回你的物品的大小。

+0

非常感謝:)我早上就試圖找到它。 – RedEyes

+0

非常歡迎;) –