0

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

对于第一级列表视图,这是 json ( filename: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 号) - 我如何将 json 写入test2.php

我是否必须为上一个列表视图中的每个项目写入所有列表视图数据?还是我必须制作几个test2.php文件对应于上一个列表视图中的每个项目?

非常欢迎和赞赏建议、建议和教程链接。

4

1 回答 1

0

您的标题使用简单的 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) { // 构建参数列表 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 对象,而不要使用来自 Server 的 Prelode。和简单的例子一样:album = new 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 查询,并获得另一个 JSON,其解析方式与第一个 Activity 相同。

如果您在 TrackerActivity 中单击 SONG,您将使用这首歌的详细信息启动新活动。

更新 2:

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

  1. 专辑列表(示例
  2. 专辑歌曲(示例
  3. 歌曲ditail(示例
于 2013-06-18T08:56:43.290 回答