我想将String数组显示为Android中的列表。列表显示但是当我滚动到列表的末尾时,它会抛出NullPointerException
。
这是我的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)
请让我知道出了什么问题。
答案 0 :(得分:1)
我不能完全确定,但我有这样的感觉:
holidayArray[i] = jsonArray.getString(j+1)+", Date: "+jsonArray.getString(j+2);
可能是罪魁祸首。
当您滚动到列表末尾时,您可能尝试获取不存在的String
,从而导致NullPointer
。
考虑到您在jsonArray
的帮助下创建了res
,请尝试使用:
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);
}
}