2011-12-24 4 views
0

Android에서 문자열 배열을 목록으로 표시하려고합니다. 목록이 표시되지만 목록 끝에 스크롤하면 NullPointerException이 표시됩니다.안드로이드에서 목록 끝에 도달하면 NullPointer 예외가 발생합니다.

이 내 ListActivity 클래스 :

12-24 09:46:58.470: E/AndroidRuntime(283): java.lang.NullPointerException 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.AbsListView.obtainView(AbsListView.java:1294) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ListView.makeAndAddView(ListView.java:1727) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ListView.fillDown(ListView.java:652) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ListView.fillGap(ListView.java:623) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.widget.ListView.onTouchEvent(ListView.java:3315) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.View.dispatchTouchEvent(View.java:3766) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-24 09:46:58.470: E/AndroidRuntime(283): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) 
12-24 09:46:58.470: E/AndroidRuntime(283): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 
12-24 09:46:58.470: E/AndroidRuntime(283): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.view.ViewRoot.handleMessage(ViewRoot.java:1785) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.os.Looper.loop(Looper.java:123) 
12-24 09:46:58.470: E/AndroidRuntime(283): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-24 09:46:58.470: E/AndroidRuntime(283): at java.lang.reflect.Method.invokeNative(Native Method) 
12-24 09:46:58.470: E/AndroidRuntime(283): at java.lang.reflect.Method.invoke(Method.java:521) 
12-24 09:46:58.470: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-24 09:46:58.470: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-24 09:46:58.470: E/AndroidRuntime(283): at dalvik.system.NativeStart.main(Native Method) 

이 오해 무슨 일이 일어나고 있는지 알려 주시기 바랍니다 : 이것은 내 XML

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textSize="20sp" 
    android:padding="15dp"> 

</TextView> 

로그입니다

public class HolidayListActivity extends ListActivity 
{ 
     String res; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 

     ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("future", "may be needed in future")); 

      String access_url = "http://127.0.0.1:8080/tt/HolidayListAction"; 
      System.out.println("****JUST ********************* "+access_url); 

      String response = null; 
      try 
      {   
      response = CustomHttpClient.executeHttpPost(access_url, postParameters); 
      //response = CustomHttpClient.executeHttpGet(access_url); 
       res=response.toString(); 

       String holidayArray[] = new String[res.length()]; 

       JSONArray jsonArray = new JSONArray(res); 



       for (int i = 0, j=-1; i < jsonArray.length()/2; i++,j=j+2) 
       {   

        holidayArray[i] = jsonArray.getString(j+1)+", Date: "+jsonArray.getString(j+2); 

       } 

       setListAdapter(new ArrayAdapter<String>(this, R.layout.holiday_list,holidayArray)); 

      } 
      catch (Exception e) 
      { 
      e.printStackTrace();   
      } 
     } 

    } 

.

답변

1

나는 완전히 확신 할 수는 없지만, 나는이 그 느낌이 있습니다

holidayArray[i] = jsonArray.getString(j+1)+", Date: "+jsonArray.getString(j+2); 

범인이 될 수 있습니다. 목록의 끝까지 스크롤 할 때 존재하지 않는 String을 얻으려는 것입니다.이 경우는 NullPointer이됩니다. 당신을 고려

이를 사용하여 시도하여 jsonArrayres의 도움으로 만들 : 반트 비어 @Sander 답장을 보내

for (int i = 0, j=-1; i < jsonArray.length()/2; i++,j=j+2) {  
    if(j+2 <= res.length()){ 
     holidayArray[i] = jsonArray.getString(j+1)+", Date: "+jsonArray.getString(j+2); 
    } 
} 
+0

감사합니다. 심지어 나는 범인이 for for loop라고 생각한다. 때문에 하드 코딩 된 문자열 배열을 넣어 잘 작동합니다. for 루프는 작동하지 않습니다. 심지어 단순한 for 루프는 동일한 nullpointer 예외를 제공합니다. – Vish

+0

도움을 주셔서 감사합니다. 문제가 해결되었습니다. 배열 길이가 문제였다. holidayArray [] 길이를 jsaonArray.length()/2로 설정합니다. – Vish

+0

답변으로 이것을 선택해야합니다. – Mafro34

관련 문제