2017-01-11 1 views
-1

나는 단일 어댑터를 사용하여 회 전자를 표시하는 네 가지 활동이 있습니다. 어댑터를 호출하는 동안 잘 작동하는 2 개의 활동 중 2 개는 충돌합니다. 주는 ArrayIndexOutOfBoundsException : 길이 = 10; 색인 = 10 오류.java.lang.ArrayIndexOutOfBoundsException : 길이 = 10; index = 10 error

여기

이 활동은 충돌 나던 코드의와 스피너와 해당 항목이 완벽하게

public class ArcherTowerActivity extends AppCompatActivity { 

Spinner sp1; 
    Spinner sp2; 
    Spinner sp3; 
    Spinner sp4; 
    Spinner sp5; 
    Spinner sp6; 
    Spinner sp7; 
    Spinner sp8; 
    TextView tx; 
    Button sbmt; 
    String levels[]={"Level 1", 
      "Level 2", 
      "Level 3", 
      "Level 4", 
      "Level 5", 
      "Level 6", 
      "Level 7", 
      "Level 8", 
      "Level 9", 
      "Level 10", 
      "Level 11", 
      "Level 12", 
      "Level 13", 
      "Level 14",}; 
    int[] images={ 
      R.drawable.archer_tower1, 
      R.drawable.archer_tower2, 
      R.drawable.archer_tower3, 
      R.drawable.archer_tower4, 
      R.drawable.archer_tower5, 
      R.drawable.archer_tower6, 
      R.drawable.archer_tower7, 
      R.drawable.archer_tower8, 
      R.drawable.archer_tower9, 
      R.drawable.archer_tower10, 
      R.drawable.archer_tower11, 
      R.drawable.archer_tower12, 
      R.drawable.archer_tower13, 
      R.drawable.archer_tower14, 
    }; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_archer_tower); 

     sbmt=(Button)findViewById(R.id.submit); 
     tx=(TextView)findViewById(R.id.upgradeResult); 
     sp1=(Spinner)findViewById(R.id.spinner); 
     sp2=(Spinner)findViewById(R.id.spinner1); 
     sp3=(Spinner)findViewById(R.id.spinner2); 
     sp4=(Spinner)findViewById(R.id.spinner3); 
     sp5=(Spinner)findViewById(R.id.spinner4); 
     sp6=(Spinner)findViewById(R.id.spinner5); 
     sp7=(Spinner)findViewById(R.id.spinner6); 
     sp8=(Spinner)findViewById(R.id.spinner7); 
     SpinnerAdapter adapter=new SpinnerAdapter(this,levels,images); 
     sp1.setAdapter(adapter); 
     sp2.setAdapter(adapter); 
     sp3.setAdapter(adapter); 
     sp4.setAdapter(adapter); 
     sp5.setAdapter(adapter); 
     sp6.setAdapter(adapter); 
     sp7.setAdapter(adapter); 
     sp8.setAdapter(adapter); 

이 활동은 그래서 여기

public class MortarActivity extends AppCompatActivity { 

    Spinner sp1; 
    Spinner sp2; 
    Spinner sp3; 
    Spinner sp4; 

    TextView tx; 
    Button sbmt; 
    String levels[]={"Level 1", 
      "Level 2", 
      "Level 3", 
      "Level 4", 
      "Level 5", 
      "Level 6", 
      "Level 7", 
      "Level 8", 
      "Level 9", 
      "Level 10", 
      }; 
    int[] images={ 
      R.drawable.mortar1, 
      R.drawable.mortar2, 
      R.drawable.mortar3, 
      R.drawable.mortar4, 
      R.drawable.mortar5, 
      R.drawable.mortar6, 
      R.drawable.mortar7, 
      R.drawable.mortar8, 
      R.drawable.mortar9, 
      R.drawable.mortar10, 

    }; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mortar); 

     sbmt=(Button)findViewById(R.id.submit); 
     tx=(TextView)findViewById(R.id.upgradeResult); 
     sp1=(Spinner)findViewById(R.id.spinner); 
     sp2=(Spinner)findViewById(R.id.spinner1); 
     sp3=(Spinner)findViewById(R.id.spinner2); 
     sp4=(Spinner)findViewById(R.id.spinner3); 

     SpinnerAdapter adapter=new SpinnerAdapter(this,levels,images); 
     sp1.setAdapter(adapter); 
     sp2.setAdapter(adapter); 
     sp3.setAdapter(adapter); 
     sp4.setAdapter(adapter); 

는 어댑터 코드

입니다 수행하는 데 실패 보여줍니다
public class SpinnerAdapter extends ArrayAdapter <String>{ 


Context c; 

    String[] levels; 
    int[] images; 

    public SpinnerAdapter(Context ctx,String[] levels, int[] images){ 

     super(ctx,R.layout.spinner_building_to_upgrade,levels); 
     this.c=ctx; 
     this.images=images; 
     this.levels=levels; 


    } 


    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 


     if(convertView==null){ 

      LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView=inflater.inflate(R.layout.spinner_building_to_upgrade,null); 
     } 

     TextView tx=(TextView) convertView.findViewById(R.id.levelNumber); 
     ImageView image=(ImageView)convertView.findViewById(R.id.imageid); 

     //SET DATA 
     tx.setText(levels[position]); 
     image.setImageResource(images[position]); 




     return convertView; 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 

      LayoutInflater inflater=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView=inflater.inflate(R.layout.spinner_building_to_upgrade,null); 
     } 

     TextView tx=(TextView) convertView.findViewById(R.id.levelNumber); 
     ImageView image=(ImageView)convertView.findViewById(R.id.imageid); 

     //SET DATA 
     tx.setText(levels[position]); 
     image.setImageResource(images[position]); 



     return convertView; 
    } 
} 
,

첫 번째 활동은 14 개 항목을 가지고 있으며, 두 번째 활동 하시던에서 10 개 항목 두 번째는 java.lang.ArrayIndexOutOfBoundsException 제공 충돌이있다 : 길이 = 10; 색인 = 10 오류.

편집 : 내가 배열 어댑터 항목을 10 미만을 입력 할 경우 충돌 및 오류를 줄 것을 내가 문제를 알아 낸

. 왜 그래야만하지? 최대 최소 길이를 설정하지 않았으므로 회 전자 어댑터에 8 개의 항목을 보내려고합니다.

오류 로그

01-11 17:44:51.066 19769-19769/com.curtztech.android.clashmate E/dalvikvm: Could not find class 'android.widget.ThemedSpinnerAdapter', referenced from method android.support.v7.widget.AppCompatSpinner$DropDownAdapter.<init> 
01-11 17:44:51.206 19769-19769/com.curtztech.android.clashmate E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.curtztech.android.clashmate, PID: 19769 
java.lang.ArrayIndexOutOfBoundsException: length=10; index=10 
at com.curtztech.android.clashmate.SpinnerAdapter.getView(SpinnerAdapter.java:74) 
at android.widget.Spinner.makeView(Spinner.java:592) 
at android.widget.Spinner.layout(Spinner.java:540) 
at android.widget.Spinner.onLayout(Spinner.java:502) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.GridLayout.onLayout(GridLayout.java:1183) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:14834) 
at android.view.ViewGroup.layout(ViewGroup.java:4635) 
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1983) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1740) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
at android.view.Choreographer.doFrame(Choreographer.java:544) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5095) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
at dalvik.system.NativeStart.main(Native Method) 
01-11 17:45:00.036 20127-20127/? E/Zygote: Zygote: error closing descriptor 
libcore.io.ErrnoException: close failed: EBADF (Bad file number) 
at libcore.io.Posix.close(Native Method) 
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) 
at com.android.internal.os.ZygoteInit.closeServerSocket(ZygoteInit.java:198) 
at com.android.internal.os.ZygoteConnection.handleChildProc(ZygoteConnection.java:879) 
at com.android.internal.os.ZygoteConnection.runOnce(ZygoteConnection.java:242) 
at com.android.internal.os.ZygoteInit.runSelectLoop(ZygoteInit.java:662) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598) 
at dalvik.system.NativeStart.main(Native Method) 
01-11 17:45:01.006 1230-2336/? E/ActivityThread: Failed to find provider info for com.android.settings.applications.SpProvider 
01-11 17:45:01.006 20160-20160/? E/Zygote: Zygote: error closing descriptor 
libcore.io.ErrnoException: close failed: EBADF (Bad file number) 
at libcore.io.Posix.close(Native Method) 
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) 
at com.android.internal.os.ZygoteInit.closeServerSocket(ZygoteInit.java:198) 
at com.android.internal.os.ZygoteConnection.handleChildProc(ZygoteConnection.java:879) 
at com.android.internal.os.ZygoteConnection.runOnce(ZygoteConnection.java:242) 
at com.android.internal.os.ZygoteInit.runSelectLoop(ZygoteInit.java:662) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598) 
at dalvik.system.NativeStart.main(Native Method) 
01-11 17:45:57.236 1230-2340/? E/ActivityThread: Failed to find provider info for com.android.settings.applications.SpProvider 
01-11 17:45:57.286 1230-1240/? E/ActivityThread: Failed to find provider info for com.android.settings.applications.SpProvider 
01-11 17:46:37.266 1230-1742/? E/LocSvc_ApiV02: E/virtual loc_api_adapter_err LocApiV02::setXtraData(char*, int):1117]: failed status = eLOC_CLIENT_SUCCESS, inject_pos_ind.status = eQMI_LOC_GENERAL_FAILURE_V02, part num = 25, ind.partNum = 0 
+0

하는 줄에 오류가 무엇입니까? –

+2

재정의'수()'방법은 전체 기록을 –

+0

@MurtazaKhursheedHussain을 반환, 그는'getCount'의 오버라이드 (override) 할 필요가 없습니다 super' 생성자'에서 levels'를 통과()' –

답변

1

이 방법을 구현하는 데 도움주세요

@Override 
public int getCount() { 
    return levels.length; 
} 
+0

내 질문 편집을 확인하십시오. –