마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

확장 리스트뷰 질문입니다. (expandable list view)

0 추천
책 보면서 코딩 연습중인데요..

배열 쪽 에러 같은데 이유를 잘 모르겠습니다.

 

-------------------------------------------------------

package com.example.expandablelistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;

public class MainActivity extends Activity {

 ExpandableListView mList;
 String[] arProv = new String[]{
   "충청도", "경기도", "강원도"
 };
 
 String[][] arCity = new String[][]{
   {"논산", "당진", "부여"},
   {"수원", "용인"},
   {"춘천", "원주", "홍천", "강릉"}
 };
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  mList = (ExpandableListView)findViewById(R.id.list);
  List<Map<String, String>> provData = new ArrayList<Map<String, String>>();
   List<List<Map<String, String>>> cityData =
   new ArrayList<List<Map<String, String>>>();
   
  for (int i = 0; i < arProv.length; i++) {
   Map<String, String> Prov = new HashMap<String, String>();
   Prov.put("prov", arProv[i]);
   provData.add(Prov);
  
   List<Map<String, String>> children = new ArrayList<Map<String,String>>();
   for (int j = 0; j < arCity.length; j++) {
    Map<String, String> City = new HashMap<String, String>();
    City.put("city", arCity[i][j]);
    children.add(City);
   }
   cityData.add(children);
  }//end for
  
  ExpandableListAdapter adapter = new SimpleExpandableListAdapter(
    this,
    provData,
    android.R.layout.simple_expandable_list_item_1,
    new String[] {"prov"},
    new int[] {android.R.id.text1},
    cityData,
    android.R.layout.simple_expandable_list_item_1,
    new String[] {"city"},
    new int[] {android.R.id.text1}
    );
    
    mList.setAdapter(adapter);
    
    System.out.println(provData.size());
    
 }//end onCreate
 
}//end MainActivity

 

-------------------------------------------------------------------------

 

로그캣 오류는

05-06 13:31:44.049: D/AbsListView(5842): Get MotionRecognitionManager
05-06 13:31:44.164: D/AndroidRuntime(5842): Shutting down VM
05-06 13:31:44.169: W/dalvikvm(5842): threadid=1: thread exiting with uncaught exception (group=0x40e422a0)
05-06 13:31:44.174: E/AndroidRuntime(5842): FATAL EXCEPTION: main
05-06 13:31:44.174: E/AndroidRuntime(5842): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.expandablelistview/com.example.expandablelistview.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread.access$700(ActivityThread.java:140)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.os.Looper.loop(Looper.java:137)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread.main(ActivityThread.java:4946)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at java.lang.reflect.Method.invokeNative(Native Method)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at java.lang.reflect.Method.invoke(Method.java:511)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at dalvik.system.NativeStart.main(Native Method)
05-06 13:31:44.174: E/AndroidRuntime(5842): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
05-06 13:31:44.174: E/AndroidRuntime(5842):  at com.example.expandablelistview.MainActivity.onCreate(MainActivity.java:46)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.Activity.performCreate(Activity.java:5206)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
05-06 13:31:44.174: E/AndroidRuntime(5842):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
05-06 13:31:44.174: E/AndroidRuntime(5842):  ... 11 more
 

앱 실행만 하면 바로 꺼집니다.

책에 나와 있는 그대로 하고 있는데 도통 모르겠습니다. ㅠ
안로개정 (200 포인트) 님이 2013년 5월 6일 질문

2개의 답변

0 추천

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
05-06 13:31:44.174: E/AndroidRuntime(5842):  at com.example.expandablelistview.MainActivity.onCreate(MainActivity.java:46

 

이거떄문인거 같은데요..

 

총수가 2개인데  3번쨰 index값(0,1,2)를 요청해서 그런거 같습니다 

 

쿨러 (2,790 포인트) 님이 2013년 5월 6일 답변
안녕하세요. 리스트 뷰때문에 연락을 드렸는데요.
expandable 뷰에 db에서 자료를 가져오려면 어떻게 해야 할까요??/
0 추천

배열에 오타가 있었네요 ㅎㅎ

 List<Map<String, String>> children = new ArrayList<Map<String,String>>();
   for (int j = 0; j < arCity[i].length; j++) {
    Map<String, String> City = new HashMap<String, String>();
    City.put("city", arCity[i][j]);
    children.add(City);
   }

안로개정 (200 포인트) 님이 2013년 5월 8일 답변
...