需要一些帮助来为多级列表视图编写json。 ^^

时间:2013-06-18 07:51:03

标签: php android mysql json

我正在尝试在我的应用程序中实现多级列表视图(基于android)。我和eclipse一起使用 php mysql

对于第一级列表视图,这是json(文件名:test1.php ):

[
    {"id":1,
     "name":"Agensi Anti Dadah Kebangsaan",
     "code":"AADK"},

    {"id":2,
     "name":"Agensi Kelayakan Malaysia",
     "code":"MQA"},

    {"id":3,
    "name":"Agensi Penguatkuassan Maritim Malaysia",
    "code":"MARITIM"},

    {"id":4,
     "name":"Akademi Seni Kebudayaan & Warisan Kebangsaan",
     "code":"ASWARA"},

    {"id":5,
     "name":"Arkib Negara Malaysia",
     "code":"ARKIB"}
] 

现在,对于二级列表视图,引用URL将是test2.php?id=1(或任何其他ID号) - 如何在test2.php中编写json?

我是否必须为上一个列表视图中的每个项目编写所有listview数据?或者我是否必须制作与前一个列表视图中的每个项目相对应的多个test2.php文件?

建议,建议和教程链接受到欢迎和赞赏。

1 个答案:

答案 0 :(得分:0)

您的Titorial使用简单ListView是ListActivity的一部分。要使用数据填充此列表,他们使用SimpleAdapter并使用服务器中的JSON响应填充。

 ListAdapter adapter = new SimpleAdapter(
       AlbumsActivity.this, albumsList,
        R.layout.list_item_albums, new String[] { TAG_ID,
        TAG_NAME, TAG_SONGS_COUNT }, new int[] {
        R.id.album_id, R.id.album_name, R.id.songs_count });

适配器中的所有数据都来自

albumsList = new ArrayList<HashMap<String, String>>();

这个ArrayList由AsyckTask中的代码填充: protected String doInBackground(String ... args){             //构建参数             List params = new ArrayList();

        // getting JSON string from URL
        String json = jsonParser.makeHttpRequest(URL_ALBUMS, "GET",
                params);

        // Check your log cat for JSON reponse
        Log.d("Albums JSON: ", "> " + json);

        try {               
            albums = new JSONArray(json);

            if (albums != null) {
                // looping through All albums
                for (int i = 0; i < albums.length(); i++) {
                    JSONObject c = albums.getJSONObject(i);

                    // Storing each json item values in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String songs_count = c.getString(TAG_SONGS_COUNT);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_SONGS_COUNT, songs_count);

                    // adding HashList to ArrayList
                    albumsList.add(map);
                }
            }else{
                Log.d("Albums: ", "null");
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

您可以直接在代码中添加JSON对象,不要使用Prelode from Server。和示例中的简单相似: 专辑=新JSONArray(json); //这是您的JSON ARRAY对象。可以从String

构造
            if (albums != null) {
                // looping through All albums
                for (int i = 0; i < albums.length(); i++) {
                    JSONObject c = albums.getJSONObject(i);

                    // Storing each json item values in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String songs_count = c.getString(TAG_SONGS_COUNT);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_SONGS_COUNT, songs_count);

                    // adding HashList to ArrayList
                    albumsList.add(map);
                }
            }else{
                Log.d("Albums: ", "null");
            }

更新:如果您点击第一个列表(相册)中的项目,则调用新活动并传递相册ID

    Intent i = new Intent(getApplicationContext(), TrackListActivity.class);
        // send album id to tracklist activity to get list of songs under that album
        String album_id = ((TextView) view.findViewById(R.id.album_id)).getText().toString();
        i.putExtra("album_id", album_id);               
        startActivity(i);

我认为在这个Activity中他们从服务器执行AsyncTask查询againe并获得另一个JSON,其解析方式与第一个活动相同。

如果您在TrackerActivity中单击SONG,则可以使用此歌曲的Ditails启动新活动。

更新2:

在服务器端,您需要将JSON Oblect生成器组织为:

  1. 相册列表(example
  2. 专辑歌曲(example
  3. Song ditail(example