2012-06-27 5 views
1

다음 코드를 사용하고 있습니다. 디버거arrayadapter 및 nullpointer 오류 예기치 않은 동작

mDbHelper.open(); 
     String[] areasList = new String[51]; 
     for (int i = 0; i<51; i ++) 
     { 
      areasList[i] = ""; 
     } 
     areasList = mDbHelper.getAllAreas(); 
     mDbHelper.close(); 

     ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, areasList); 
     spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     chooseArea.setAdapter(spinnerArrayAdapter); 

그것은 데이터베이스에서 찍은 String[]의 모든 값을 나타낸다.

public String[] getAllAreas() 
    { 
     String[] areasList = new String[51]; 
     String queryString = "SELECT areaName FROM TFTaxi"; 
     Cursor resultSet = mDb.rawQuery(queryString, null); 
     for (int i = 0; i<51; i ++) 
     { 
      areasList[i] = ""; 
     } 
     int i = 1; 
     areasList[0] = "Choose your Area"; 

     while(resultSet.moveToNext()) 
     { 

      areasList[i] = resultSet.getString(resultSet.getColumnIndex("areaName")); 
      i++; 
     } 

     resultSet.close(); 
     return areasList; 
    } 

그러나 그 다음 그것이 인해 areasList 중 하나에 오류가 분명 위의 오류에서 오류

06-27 23:40:43.882: E/AndroidRuntime(16467): FATAL EXCEPTION: main 
06-27 23:40:43.882: E/AndroidRuntime(16467): java.lang.NullPointerException 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.Spinner.onMeasure(Spinner.java:285) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.View.measure(View.java:12723) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.os.Looper.loop(Looper.java:137) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at java.lang.reflect.Method.invokeNative(Native Method) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at java.lang.reflect.Method.invoke(Method.java:511) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at dalvik.system.NativeStart.main(Native Method) 
+0

배열 초기화 코드를; 효과가 없다. 제거 할 수 있습니다. 그 외 : DB에 null 값이 포함되어 있지 않은지 확인 했습니까? (NOT NULL 제약 조건을 사용하여이를 시행 할 수있다). – tiguchi

답변

1
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
06-27 23:40:43.882: E/AndroidRuntime(16467): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 

에게 제공 [I] 널 .... see line 394

텍스트입니다 .setText (item.toString());

  • 반복하기 전에 커서를 첫 번째 cursor.moveToFirst()에 설정하십시오.

.

cursor.moveToFirst(); 
     do { 


     } while (cursor.moveToNext()); 
+0

나는 이미 내 디버거가 null 문자가없는 51 개의 값으로 구성된 전체 문자열을 표시한다고 명시 했으므로 ( –

+0

) 텍스트 (TextView)도 394로 null 일 수 있습니다. –

+0

마지막 코드를 업데이트하고 당신은 아무 null 문자가없는 51 값의 모든 문자열을 검사했습니다. –

0

resultSet.moveToNext()은 - 옆으로 이동, 그래서 내 생각은 (커서가 항목의 정확한 숫자 포함 된 경우에도 - 50)를 그냥 DB에서 첫 번째 항목을 생략 할 것이다. do {} while(resultSet.moveToNext())

+0

내 디버거가 전체 String에 null 값을 표시하지 않음 [ ] –

+0

@ 마마 : 그때 나는 아이디어가 없어서 죄송합니다. –

0

을 사후에 전제 조건 while(resultSet.moveToNext()) {}로 전환

봅니다 난 당신이 그 기록을 처리하기 전에 moveToNext를 호출하여 하나 개의 결과 기록을 건너 뛸 생각합니다. 쿼리를 가정

50 개 기록 만이 변화를 시도 반환) (areasList = mDbHelper.getAllAreas를 호출하기 전에

public String[] getAllAreas() 
    { 
     ..... 
     resultSet.moveToFirst(); 
     while(!resultSet.isAfterLast()) 
     { 
      areasList[i] = resultSet.getString(resultSet.getColumnIndex("areaName")); 
      i++; 
      resultSet.moveToNext(); 
     } 
     ......... 
    }