Java hashmap在android中以可扩展的listview显示数据
我正试图在android服务器上以可扩展的列表视图显示数据。我正在尝试在Java hashmap在android中以可扩展的listview显示数据,java,android,listview,hashmap,expandablelistview,Java,Android,Listview,Hashmap,Expandablelistview,我正试图在android服务器上以可扩展的列表视图显示数据。我正在尝试在AsyncTask中实现hashmap。请参阅以下代码 private class HttpAsyncTaskReports extends AsyncTask<String, Void, String> { private ProgressDialog dialog; public HttpAsyncTaskReports(ExpandableActivity activity) {
AsyncTask
中实现hashmap。请参阅以下代码
private class HttpAsyncTaskReports extends AsyncTask<String, Void, String> {
private ProgressDialog dialog;
public HttpAsyncTaskReports(ExpandableActivity activity) {
dialog = new ProgressDialog(activity);
}
@Override
protected String doInBackground(String... urls) {
return GET(urls[0]);
}
@Override
protected void onPreExecute() {
// Removes all markers, overlays, and polylines from the map.
dialog.setMessage("Loading reports, please wait.");
dialog.show();
}
@Override
protected void onPostExecute(String result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Header, Child data
List<String> top250 = new ArrayList<String>();
top250.add("The Shawshank Redemption");
top250.add("The Godfather");
try {
JSONArray jArray = new JSONArray(result);
JSONObject jsonobject = jArray.getJSONObject(0);
JSONArray jsonAssets = jsonobject.getJSONArray("last_data");
Log.d("LASTLATLONG", result);
for (i = 0; i < jsonAssets.length(); i++) {
JSONObject nlmJsonObject = jsonAssets.getJSONObject(i);
JSONObject lastData_JsonObject = nlmJsonObject.getJSONObject("last_data");
JSONObject lastData_timeJsonObject = lastData_JsonObject.getJSONObject("time");
// JSONObject lastData_dateJsonObject = lastData_timeJsonObject.getJSONObject("$date");
// JSONObject lastData_speedJsonObject = lastData_JsonObject.getJSONObject("speed");
// Adding child data
listDataHeader.add(lastData_timeJsonObject.getString("$date"));
listDataChild.put(listDataHeader.get(i), top250);
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Server Error :( Please wait!", Toast.LENGTH_LONG).show();
}
}
}
这里是错误
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3124)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3233)
at android.app.ActivityThread.access$1000(ActivityThread.java:197)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6856)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at gps.finder.com.findermaterial.ExpandableListAdapter.getGroupCount(ExpandableListAdapter.java:75)
at android.widget.ExpandableListConnector.getCount(ExpandableListConnector.java:397)
at android.widget.ListView.setAdapter(ListView.java:502)
at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:604)
at gps.finder.com.findermaterial.ExpandableActivity.onCreate(ExpandableActivity.java:102)
at android.app.Activity.performCreate(Activity.java:6550)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3077)
谁能告诉我该如何解决这个问题
如果我使用下面这样的函数来列出数据,它会成功地工作
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Adding child data
listDataHeader.add("Top 50");
listDataHeader.add("Now Showing");
listDataHeader.add("Coming Soon..");
// Adding child data
List<String> top250 = new ArrayList<String>();
top250.add("The Shawshank Redemption");
top250.add("The Godfather");
top250.add("The Godfather: Part II");
top250.add("Pulp Fiction");
top250.add("The Good, the Bad and the Ugly");
top250.add("The Dark Knight");
top250.add("12 Angry Men");
List<String> nowShowing = new ArrayList<String>();
nowShowing.add("The Conjuring");
nowShowing.add("Despicable Me 2");
nowShowing.add("Turbo");
nowShowing.add("Grown Ups 2");
nowShowing.add("Red 2");
nowShowing.add("The Wolverine");
List<String> comingSoon = new ArrayList<String>();
comingSoon.add("2 Guns");
comingSoon.add("The Smurfs 2");
comingSoon.add("The Spectacular Now");
comingSoon.add("The Canyons");
comingSoon.add("Europa Report");
listDataChild.put(listDataHeader.get(0), top250); // Header, Child data
listDataChild.put(listDataHeader.get(1), nowShowing);
listDataChild.put(listDataHeader.get(2), comingSoon);
}
private void prepareListData(){
listDataHeader=新的ArrayList();
listDataChild=newHashMap();
//添加子数据
添加(“前50名”);
添加(“现在显示”);
添加(“即将推出…”);
//添加子数据
List top250=新的ArrayList();
top250.添加(“肖申克的救赎”);
添加(“教父”);
top250.添加(“教父:第二部分”);
top250.添加(“低俗小说”);
添加(“好、坏、丑”);
添加(“黑暗骑士”);
添加(“12个愤怒的男人”);
List nowShowing=新建ArrayList();
现在显示。添加(“变戏法”);
添加(“卑鄙的我2”);
现在显示。添加(“Turbo”);
现在显示。添加(“成年人2”);
现在显示。添加(“红色2”);
现在显示。添加(“狼獾”);
List comingSoon=新建ArrayList();
很快就来。添加(“2支枪”);
很快就来。添加(“蓝精灵2”);
即将到来。添加(“现在的壮观”);
即将到来。添加(“峡谷”);
即将出版。添加(“欧罗巴报告”);
listDataChild.put(listDataHeader.get(0),top250);//头,子数据
listDataChild.put(listDataHeader.get(1),现在显示);
listDataChild.put(listDataHeader.get(2),即将出现);
}
但我需要使用从服务器检索的数据来实现hashmap
我感谢你的建议。提前感谢。适配器类在哪里???
listDataHeader.add(i,lastData\u timeJsonObject.getString($date));listDataChild.put(listDataHeader.get(i),top250)代码>尝试此操作。错误发生在适配器类中。请张贴code@NezSpencer我添加了ExpandableListAdapter类。@java8。请查看ExpandableListAdapter类。这里我只能传递一个值。其中是适配器类???listDataHeader.add(I,lastData_timeJsonObject.getString($date));listDataChild.put(listDataHeader.get(i),top250)代码>尝试此操作。错误发生在适配器类中。请张贴code@NezSpencer我添加了ExpandableListAdapter类。@java8。请查看ExpandableListAdapter类。这里我只能传递一个值。
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Adding child data
listDataHeader.add("Top 50");
listDataHeader.add("Now Showing");
listDataHeader.add("Coming Soon..");
// Adding child data
List<String> top250 = new ArrayList<String>();
top250.add("The Shawshank Redemption");
top250.add("The Godfather");
top250.add("The Godfather: Part II");
top250.add("Pulp Fiction");
top250.add("The Good, the Bad and the Ugly");
top250.add("The Dark Knight");
top250.add("12 Angry Men");
List<String> nowShowing = new ArrayList<String>();
nowShowing.add("The Conjuring");
nowShowing.add("Despicable Me 2");
nowShowing.add("Turbo");
nowShowing.add("Grown Ups 2");
nowShowing.add("Red 2");
nowShowing.add("The Wolverine");
List<String> comingSoon = new ArrayList<String>();
comingSoon.add("2 Guns");
comingSoon.add("The Smurfs 2");
comingSoon.add("The Spectacular Now");
comingSoon.add("The Canyons");
comingSoon.add("Europa Report");
listDataChild.put(listDataHeader.get(0), top250); // Header, Child data
listDataChild.put(listDataHeader.get(1), nowShowing);
listDataChild.put(listDataHeader.get(2), comingSoon);
}