2013-05-23 2 views
0

По какой-то загадочной причине, следующий код делает мой Android сбой приложения:сбой приложения при попытке получить доступ к многомерный массив

public class NearestFixMarker { 

private static MyArrayListMarker nearestFixMarker[] = new MyArrayListMarker[Configuration.Display.getNumberOfFixType()]; 

private static Bitmap icon[][] = new Bitmap[Configuration.Display.getNumberOfFixType()][GenericNdData.getNearestFixList().getNearestFixCount()]; 

public static void add(int color) { 
    for (int i = 0; i < icon.length; i++) { 
     Drawable d = DrawableUtils.resizeImageToDrawable(
       MapViewFragment.mapViewActivity, 
       Configuration.Display.getDrawableFix(i), 
       Configuration.MapView.getWaypointIconWidth(), 
       Configuration.MapView.getWaypointIconHeight()); 
     d.setColorFilter(color, Mode.MULTIPLY); 

     Bitmap b = ((BitmapDrawable) d).getBitmap(); 

     Paint pnt = new Paint(); 
     Canvas myCanvas = new Canvas(b); 

     int myColor = b.getPixel(0,0); 

     ColorFilter filter = new LightingColorFilter(myColor, color); 
     pnt.setColorFilter(filter); 

     myCanvas.drawBitmap(b,0,0,pnt); 

     icon[i][0] = b; 
     nearestFixMarker[i] = new MyArrayListMarker(); 
    } 
} 
    ... 
} 

Вот что показывает Logcat:

05-23 14:24:42.918: W/dalvikvm(3660): threadid=1: thread exiting with uncaught exception (group=0x41c83930) 
05-23 14:24:42.928: E/AndroidRuntime(3660): FATAL EXCEPTION: main 
05-23 14:24:42.928: E/AndroidRuntime(3660): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ihm/com.example.ihm.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.os.Looper.loop(Looper.java:137) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at dalvik.system.NativeStart.main(Native Method) 
05-23 14:24:42.928: E/AndroidRuntime(3660): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at com.example.ihm.mapview.marker.NearestFixMarker.add(NearestFixMarker.java:73) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at com.example.ihm.mapview.MapViewFragment.onActivityCreated(MapViewFragment.java:151) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.Fragment.performActivityCreated(Fragment.java:1703) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.BackStackRecord.run(BackStackRecord.java:682) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.Activity.performStart(Activity.java:5113) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153) 
05-23 14:24:42.928: E/AndroidRuntime(3660):  ... 11 more 
05-23 14:24:42.928: W/ActivityManager(497): Force finishing activity com.example.ihm/.MainActivity 

По-видимому, он обращается к массиву, который создает проблему, но я не понимаю, почему это происходит. Раньше у меня был простой массив, и он работал нормально. Теперь я заменил его на многомерный массив, и он сработает. Я пропустил что-то очевидное здесь?

+1

исключение указывает, что длина равна нулю вашего массива и вы пытаетесь получить доступ к его нулевому индексу. Убедитесь, что ваш массив не пуст! –

+0

Можете ли вы сказать, в какой строке вы получаете сообщение об ошибке? –

+0

БлижайшиеFixMarker.add (БлижайшиеFixMarker.java:73) – Blackbelt

ответ

1

Вы получаете исключение на этой линии

icon[i][0] = b; 

Размер этого массива 0, так что вы можете получить доступ к 0 элементу

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
+0

Это было. Оказывается, значение GenericNdData.getNearestFixList(). GetNearestFixCount() вычисляется позже в программе, поэтому оно равно 0, когда этот код выполняется. Спасибо. – Apoz

+0

@Apoz np, я просто читал журнал –