2011-12-24 7 views
0

Androidで文字列配列をリストとして表示したい。リストが表示されますが、リストの末尾までスクロールすると、NullPointerExceptionがスローされます。Androidのリストの終わりに達したときにNullPointer例外が発生する

これは私の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です。あなたがresの助けを借りて、あなたのjsonArrayを作成考慮

、これを使用してみてください:ファントヴィール@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ループは動作していません。単純なforループでも同じnullpointer例外が発生します。 – Vish

+0

助けてくれてありがとう。問題は解決されます。配列の長さが問題でした。私はholidayArray []の長さをjsaonArray.length()/ 2に設定しました。 – Vish

+0

これを答えとして選択する必要があります。 – Mafro34

関連する問題