我正在尝试在我的应用程序中实现多级列表视图(基于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
文件?
建议,建议和教程链接受到欢迎和赞赏。
答案 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生成器组织为: