Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向可展开列表视图动态添加组和标题_Java_Android_Json_Expandablelistview - Fatal编程技术网

Java 向可展开列表视图动态添加组和标题

Java 向可展开列表视图动态添加组和标题,java,android,json,expandablelistview,Java,Android,Json,Expandablelistview,我将数据作为JSON数组输入,并对其进行解析。以下是一个例子: [{"Tag":"Amusement Parks","Category":"Attractions"},{"Tag":"Restaurant","Category":"Food"}, etc] 我想做的是使每个“类别”成为ListView中的标题,使每个“标记”成为该标题的子项。现在我正在硬编码标题并添加如下标记: listDataHeader.add("Attractions"); listDataHeader.

我将数据作为JSON数组输入,并对其进行解析。以下是一个例子:

[{"Tag":"Amusement Parks","Category":"Attractions"},{"Tag":"Restaurant","Category":"Food"}, etc]
我想做的是使每个“类别”成为ListView中的标题,使每个“标记”成为该标题的子项。现在我正在硬编码标题并添加如下标记:

    listDataHeader.add("Attractions");
    listDataHeader.add("Food");
    listDataHeader.add("Lodging");

            ...

            JSONArray jArray = new JSONArray(result);
            Log.d("Array Length: ", Integer.toString(jArray.length()));

            for (int i = 0; i < jArray.length(); i++) {
                final JSONObject json = jArray.getJSONObject(i);

                if (json.getString("Category").equals("Attractions")) {
                    tempAttractions.add(json.getString("Tag"));
                }
                if (json.getString("Category").equals("Food")) {
                    tempFood.add(json.getString("Tag"));
                }
                if (json.getString("Category").equals("Lodging")) {
                    tempLodging.add(json.getString("Tag"));
                }
            }
    }

    protected void onPostExecute(Void... params) {

        listDataChild.put(listDataHeader.get(0), tempAttractions);
        listDataChild.put(listDataHeader.get(1), tempFood);
        listDataChild.put(listDataHeader.get(2), tempLodging);
我认为这更多的是一个概念性问题,我似乎无法掌握一种方法来完成这项工作。有什么想法吗?谢谢

完整代码

公共类CategorySelect扩展了BaseActivity{

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;

private String[] navMenuTitles;
private TypedArray navMenuIcons;

List<String> listAttractions;
List<String> listFood;
List<String> listLodging;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_category_select);

    // initialize Nav Drawer
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);
    set(navMenuTitles, navMenuIcons);

    progress = new ProgressDialog(this);
    progress.setMessage("Loading...Please Wait");
    progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progress.setIndeterminate(true);

    // get the listview
    expListView = (ExpandableListView) findViewById(R.id.lvExp);

    // preparing list data
    prepareListData();

    listAdapter = new ExpandableListAdapter(this, listDataHeader,
            listDataChild);

    // setting list adapter
    expListView.setAdapter(listAdapter);
}

private void prepareListData() {
    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();

    // Adding child data
    listDataHeader.add("Attractions");
    listDataHeader.add("Food");
    listDataHeader.add("Lodging");

    listAttractions = new ArrayList<String>();
    listFood = new ArrayList<String>();
    listLodging = new ArrayList<String>();

    new FillCategories().execute();
}

private class FillCategories extends
        AsyncTask<Integer, Void, Void> {
    List<String> tempAttractions = new ArrayList<String>();
    List<String> tempFood = new ArrayList<String>();
    List<String> tempLodging = new ArrayList<String>();

    @Override
    protected ArrayList<Location> doInBackground(Integer... params) {

        String result = "";
        InputStream isr = null;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                    "");

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            String action = "nav";

            nameValuePairs.add(new BasicNameValuePair("action", action));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            isr = entity.getContent();

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }
        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(isr, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            isr.close();

            result = sb.toString();
        } catch (Exception e) {
            Log.e("log_tag", "Error  converting result " + e.toString());
        }

        // parse json data
        try {
            JSONArray jArray = new JSONArray(result);
            Log.d("Array Length: ", Integer.toString(jArray.length()));

            for (int i = 0; i < jArray.length(); i++) {
                final JSONObject json = jArray.getJSONObject(i);

                //Log.d("Text", json.getString("Txt"));

                if (json.getString("Cat").equals("Attractions")) {
                    tempAttractions.add(json.getString("Txt"));
                    if (json.getString("Tag").equals(null)) {
                        tempAttractionsTags.add(json.getString("Txt"));
                    } else {
                        tempAttractionsTags.add(json.getString("Tag"));
                    }
                }
                if (json.getString("Cat").equals("Food")) {
                    tempFood.add(json.getString("Txt"));
                    if (json.getString("Tag").equals(null)) {
                        tempFoodTags.add(json.getString("Txt"));
                    } else {
                        tempFoodTags.add(json.getString("Tag"));
                    }
                }
                if (json.getString("Cat").equals("Lodging")) {
                    tempLodging.add(json.getString("Txt"));
                    if (json.getString("Tag").equals("")) {
                        tempLodgingTags.add(json.getString("Txt"));
                        Log.d("Tag", "Is Null");
                    } else {
                        tempLodgingTags.add(json.getString("Tag"));
                        Log.d("Tag Not Null", json.getString("Tag"));
                    }
                }
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    protected void onPostExecute(Void... params) {

        listDataChild.put(listDataHeader.get(0), tempAttractions);
        listDataChild.put(listDataHeader.get(1), tempFood);
        listDataChild.put(listDataHeader.get(2), tempLodging);

    }
}
}
ExpandableListAdapter-listAdapter;
ExpandableListView解释视图;
列表列表数据头;
HashMapListDataChild;
私有字符串[]navMenuTitles;
专用型雷达导航仪;
列出旅游景点;
列出食物清单;
住宿清单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u category\u select);
//初始化导航抽屉
navMenuTitles=getResources().getStringArray(R.array.nav\u抽屉\u项目);
navMenuIcons=getResources()
.obtainTypedArray(R.array.nav_drawer_图标);
集合(导航菜单工具、导航菜单);
进度=新建进度对话框(此对话框);
progress.setMessage(“正在加载…请稍候”);
progress.setProgressStyle(ProgressDialog.STYLE\u微调器);
progress.setUndeterminate(true);
//获取列表视图
expListView=(ExpandableListView)findViewById(R.id.lvExp);
//准备列表数据
prepareListData();
listAdapter=新的ExpandableListAdapter(此,listDataHeader,
listDataChild);
//设置列表适配器
expListView.setAdapter(listAdapter);
}
私有void prepareListData(){
listDataHeader=新的ArrayList();
listDataChild=newHashMap();
//添加子数据
添加(“景点”);
添加(“食品”);
listDataHeader.添加(“住宿”);
listAttractions=新的ArrayList();
listFood=newarraylist();
ListLotting=新的ArrayList();
新建FillCategories().execute();
}
私有类FillCategories扩展
异步任务{
List=newarraylist();
List tempFood=new ArrayList();
List templaoding=new ArrayList();
@凌驾
受保护的ArrayList doInBackground(整数…参数){
字符串结果=”;
InputStream isr=null;
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(
"");
List nameValuePairs=新的ArrayList();
字符串action=“nav”;
添加(新的BasicNameValuePair(“操作”,action));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
isr=entity.getContent();
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
//将响应转换为字符串
试一试{
BufferedReader reader=新的BufferedReader(
新的InputStreamReader(isr,“iso-8859-1”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
isr.close();
结果=sb.toString();
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
//解析json数据
试一试{
JSONArray jArray=新JSONArray(结果);
Log.d(“数组长度:”,Integer.toString(jArray.Length());
for(int i=0;i
您可以使用此库:,它非常简单且非常高效

您可以这样做

            for (int i = 0; i < jArray.length(); i++) {
            final JSONObject json = jArray.getJSONObject(i);

            if (listDataChild.get(json.getString("Category")) == null) {
               tempList = new ArrayList<String>();
               tempList.add(json.getString("Tag"));
               listDataChild.put(json.getString("Category"), tempList );
            }else{
               tempList = listDataChild.get(json.getString("Category"));
               tempList.add(json.getString("Tag"));
               listDataChild.put(json.getString("Category"), tempList );
           }
for(int i=0;i            for (int i = 0; i < jArray.length(); i++) {
            final JSONObject json = jArray.getJSONObject(i);

            if (listDataChild.get(json.getString("Category")) == null) {
               tempList = new ArrayList<String>();
               tempList.add(json.getString("Tag"));
               listDataChild.put(json.getString("Category"), tempList );
            }else{
               tempList = listDataChild.get(json.getString("Category"));
               tempList.add(json.getString("Tag"));
               listDataChild.put(json.getString("Category"), tempList );
           }