2017-12-28 27 views
0

Greedo가 범위를 벗어난 인덱스에 액세스하는 것을 어떻게 방지합니까?안드로이드 GreedoLayout 아웃 오브 바운드 예외를 방지하는 방법?

--------- 충돌 시작

12-28 17 : 19 : 22.338 8668-8668/com.pixerf.android 다음

스택 트레이스이고 E/AndroidRuntime : 치명적인 예외 : 주 프로세스 : com.pixerf.android, PID : 8668 java.lang.IndexOutOfBoundsException : 색인 : 56, 크기 : 56 at java.util.ArrayList.get (ArrayList.java:411) at com.fivehundredpx.greedolayout.GreedoLayoutSizeCalculator.sizeForChildAtPosition (G reedoLayoutSizeCalculator.java:71) com.fivehundredpx.greedolayout에서 com.fivehundredpx.greedolayout.GreedoLayoutManager.preFillGrid (GreedoLayoutManager.java:206에서 com.fivehundredpx.greedolayout.GreedoLayoutManager.sizeForChildAtPosition (GreedoLayoutManager.java:282) 에서 ) . (RecyclerView.java:3436)에서 android.support.v7.widget.RecyclerView.dispatchLayoutStep2 android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3988) android.view.View.layout (View.java:17523) android.view.ViewGroup.layout (ViewGroup.java:5612) at android.support.v4.widget.SwipeRefreshLayout.onLayout (SwipeRefreshLayout.java:611) android.view.View.layout (View.java : android.view.ViewGroup.layout (ViewGroup.java:5612) android.widget.RelativeLayout.onLayout (RelativeLayout.java:1079) android.view.View.layout에서 에서 에서 17,523) (View.java:17523) android.support.v4.view.ViewPager.onLayout (ViewPager.java:1769)에서 android.view.View.layout (View.java : 17523) at (ViewGroup.java:5612) android.support.design.widget.HeaderScrollingViewBehavior.layoutChild (HeaderScrollingViewBehavior.java:132) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild (ViewOffsetBehavior. 자바 : android.support.design.widget.AppBarLayout $ ScrollingViewBehavior.onLayoutChild (AppBarLayout.java:1361) android.support.design.widget.CoordinatorLayout.onLayout (CoordinatorLayout.java:874에서 ) 안드로이드에서 42) . view.View.layout (View.java:17523) android.view.ViewGroup.layout (ViewGroup.java:5612)의 android.widget.FrameLayout.layoutChildren (FrameLayout.java:323) android.widget.FrameLayout.onLayout (FrameLayout.java:261) android.view.View.layout (View.java:17523)의 android.view.ViewGroup.layout의 (ViewGroup.java:5612) 안드로이드의 android.view에서 android.widget.LinearLayout.onLayout (LinearLayout.java:1494) 에서 android.widget.LinearLayout.layoutVertical (LinearLayout.java:1585) 에서 .widget.LinearLayout.setChildFrame (LinearLayout.java:1741) .View.layout (View.java:17523) at android.view.ViewGroup.layout (ViewGroup.java:5612) android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)에서 android.widget.FrameLayout.onLayout (FrameLayout.java:261)에서 android.view에서 . View.layout (View.java:17523) android.view.ViewGroup.layout (ViewGroup.java:5612)에서 android.widget.LinearLayout.setChildFrame (LinearLayout.java:1741)에서 android.widget.LinearLayout에서 . layoutVertical android.view.View.layout (View.java:17523)에서 android.widget.LinearLayout.onLayout (LinearLayout.java:1494)에서 (LinearLayout.java:1585) android.view.ViewGroup.layout에서 com.android.internal.policy.DecorView에서 android.widget.FrameLayout.onLayout (FrameLayout.java:261)에서 android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)에서 (ViewGroup.java:5612) .onLayout (DecorView.java:724) android.view.View.layout (View.java:17523) at android.view.ViewGroup.layout (ViewGroup.java:5612) at android.view.ViewRootImpl.performLayout android.view.ViewRootImpl에서 android.view.ViewRootImpl.performTraversals에서 (ViewRootImpl.java:2342) (ViewRootImpl.java:2069) android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1246)에서 $ TraversalRunnable.run (ViewRootImpl.java:6301) android.view.Choreographer $ CallbackRecord.run (Choreographer.java:871) android.view.Choreographer.doCallbacks (Choreographer.java:683) android.view .Choreographer.doFrame (Choreographer.java:619) android.os.Handler.handleCallback (Handler.java:751) 12-28 17 : 19 : 22.339 8668-8668/com.pixerf.android E/AndroidRuntime : android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:154) at에 있습니다. android.app.ActivityThread.main (ActivityThread.java:6077) at java.lang.reflect.Method.invoke (네이티브 메소드) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:756가)

답변

0

당신의 ArrayList 또는 배열의 크기를 확인하고 스택 추적을 기반으로 작업

if(arraylist.size()>0) 
{ 
//do something 
} 
+0

을, 배열이 비어 있지 않습니다. 내 예에서는 페이징이 관련되어 있습니다. GreedoLayout 라이브러리에서 충돌이 발생합니다. –

+0

그 라이브러리의 arraylist를 얻을 수있는 방법이 있습니까? 그렇다면 당신은 작업을 끝내기 전에 그 arraylist의 크기를 확인하려고 할 것입니다. –