简体   繁体   中英

NullPointer exception when reached at the end of list in Android

I want to show String array as a list in Android. The list is displayed but as I scroll to the end of the list it throws NullPointerException .

This is my ListActivity class:

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();        
          }
      }

    }

This is my 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>

The log:

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)

Please let me know what's going wrong.

I can't be entirely sure, but I have the feeling that this:

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

might be the culprit. You're probably trying to get a String that doesn't exist when you scroll to the end of the list, causing this NullPointer .

Considering you create your jsonArray with the help of res , try using this:

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);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM