2011-12-24 58 views
0

我想在Android中顯示字符串數組作爲列表。該列表顯示,但當我滾動到列表的末尾時,它會拋出NullPointerExceptionNullPointer異常,當在Android中列表的末尾達到時

這是我ListActivity類:

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

    } 

這是我的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> 

日誌:

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) 

請讓我知道什麼地方出了錯。

回答

1

我不能完全肯定,但我的感覺是這樣的:

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

可能是罪魁禍首。 您可能試圖獲取String,當您滾動到列表的末尾時導致此NullPointer不存在。

考慮您創建jsonArrayres的幫助下,嘗試使用這樣的:

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

感謝您的回覆@Sander範特德維爾。即使我認爲罪魁禍首是我的循環。因爲當我把一個硬編碼的字符串數組,它工作正常。您建議的for循環不起作用。即使是簡單的for循環也會給出相同的空指針異常。 – Vish 2011-12-24 11:09:47

+0

感謝您的幫助。問題解決了。數組長度是一個問題。我將holidayArray []長度設置爲jsaonArray.length()/ 2。 – Vish 2011-12-24 11:18:25

+0

你應該選擇這個作爲答案,@Vish。 – Mafro34 2013-11-28 16:41:21

相關問題