혼자 고민고민 하다가 도대체 해결이 안되서 질문 드립니다.
알려주시면 대단히 감사하겠습니다.
아래와 같은 코드를 작성했는데,
----------------------------------------------------------------------------------------------------------
...
ArrayList<String> sidoItem;
AlertDialog.Builder dialog;
...
private void initDialog(){
final ZipCode zipcode = new ZipCode();
sidoItem = zipcode.getSIDO();
final String[] sidoItems = new String[sidoItem.size()];
for (int i=0;i<sidoItem.size();i++) {
try{
if(sidoItem.get(i).equals(sidoItem.get(i+1))){
}
else{
sidoItems[i] = sidoItem.get(i);
Log.d("MyTag", "sidoItems["+i+"]: "+sidoItems[i]);
}
}catch(IndexOutOfBoundsException e){e.printStackTrace();}
}
dialog = new AlertDialog.Builder(this);
dialog.setTitle("시선택");
dialog.setSingleChoiceItems(sidoItems, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), sidoItems[which], Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
dialog.show();
}
----------------------------------------------------------------------------------------------------------
public ArrayList<String> getSIDO(){
ArrayList<String> sidolist = new ArrayList<String>();
try{
mDatabase = SQLiteDatabase.openDatabase(ROOT_DIR + "databases/postcode.db", null, Context.MODE_WORLD_WRITEABLE);
mCursor = mDatabase.query("zipcode", new String[] {"SIDO"},null,null,null,null,null);
if(mCursor.moveToFirst())
{
do{
sidolist.add(mCursor.getString(0));
}while (mCursor.moveToNext());
}
Log.d("MyTag", "getSIDO Invoked");
}catch(NullPointerException e){e.printStackTrace();}
mDatabase.close();
return sidolist;
}
----------------------------------------------------------------------------------------------------------
자꾸 NullPointerException이 발생해서 프로그램이 종료됩니다.
근데 희한한건 dialog생성되는 부분부터 dialog.show()까지 NullPointerException 처리하면, 오류가 발생하지 않으나 실제 Vitual Device에서 Dialog창이 생성되지 않습니다.
아래는 Logcat 내용 입니다.
11-19 01:47:23.355: E/AndroidRuntime(230): Uncaught handler: thread main exiting due to uncaught exception
11-19 01:47:23.375: E/AndroidRuntime(230): java.lang.NullPointerException
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.ListView.measureHeightOfChildren(ListView.java:1147)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.ListView.onMeasure(ListView.java:1060)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.View.measure(View.java:7964)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.View.measure(View.java:7964)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.View.measure(View.java:7964)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.View.measure(View.java:7964)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.View.measure(View.java:7964)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.os.Looper.loop(Looper.java:123)
11-19 01:47:23.375: E/AndroidRuntime(230): at android.app.ActivityThread.main(ActivityThread.java:4363)
11-19 01:47:23.375: E/AndroidRuntime(230): at java.lang.reflect.Method.invokeNative(Native Method)
11-19 01:47:23.375: E/AndroidRuntime(230): at java.lang.reflect.Method.invoke(Method.java:521)
11-19 01:47:23.375: E/AndroidRuntime(230): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-19 01:47:23.375: E/AndroidRuntime(230): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-19 01:47:23.375: E/AndroidRuntime(230): at dalvik.system.NativeStart.main(Native Method)
안녕하세요.
내용을 좀 더 보강 하였습니다. sidoItems에는 본문 내용의 파란색과 같은 자료들이 저장 되었습니다.
그리고 모든 에러 내용은 본문의 에러내용이 전부 입니다.
알려주시면 정말 감사하겠습니다. ^-^)
아래로그를 보시면 아시겠지만.. sidoItems[] 배열의 실제 크기는 엄청나게 많죠.. 마지막인덱스가 48687이네요 ''
위에 sidoItems[] = new string[sidoItem.size()] 객체 생성하셨을때
모든 sidoItems[]의 값은 null상태가 됩니다..(초기화가 안됬죠.)
이 후에 반복,조건문으로 특정인덱스의 경우에 sidoItem의 값이 sidoItems에 들어가네요..
즉 중간중간 sidoItems[]의 몇몇 인덱스는 null이 되고 이것을 이용해 리스트 다이얼로그를 만들어서 문제가 됩니다.
해결법은 스트링 배열대신 arraylist를 사용해서 조건에 맞을때만 add해주던가 편하게 arrayAdapter나 cursor를 쓰는 다른 오버로딩 메쏘드를 써주시면 되겠네요..
sido




소스상에서는 문제점이 보이지 않네요.
sidoItems 이 객체가 null 이 아닌지 확인 가능한가요?
분석을 위해선 로그의 앞뒤 문맥이 더 필요합니다.