0

我遇到了json array数据问题,我尝试了以下代码,我可以得到json response完美的结果,但是listview即使在响应中我也得到了单个数据,我也得到了单个项目,为什么?

这是代码:

URL = "some url";

HttpClient mHttpClient = new DefaultHttpClient();
HttpGet mGetMethod = new HttpGet(URL);
HttpResponse mReponseMessage = mHttpClient.execute(mGetMethod);

String Response = EntityUtils.toString(mReponseMessage.getEntity());
Log.d("TAG", "O/P Response is " + Response);

JSONArray responseObject = new JSONArray(Response);
System.out.println("responseObject="+responseObject);

for(int i=0; i<responseObject.length(); i++) {                      
    obj = responseObject.getJSONObject(i);
}

这是我的 json 回复

[{"dmessage":"sfsfs","message":"sfsf","mp3":"Kalimba.mp3","user_message_id":"85","category":"Lottery","title":"dgfs"},{"dmessage":"prueba","message":"prueba","mp3":"NA","user_message_id":"80","category":"Lottery","title":"prueba"},{"dmessage":"prueba","message":"prueba","mp3":"NA","user_message_id":"79","category":"Lottery","title":"prueba"},

这里 obj 是response object,在响应对象中,我也得到了单个值

谁能帮我解决这个问题谢谢!

4

3 回答 3

3

在您的 for 循环中,您将遍历数组中的所有值并将其存储在同一个变量中,该变量每次都替换该值并且仅包含最后一个值。

解决方案 :

ArrayList<HashMap<String, String, String, String, String, String>> mp3List = new ArrayList<HashMap<String, String, String, String, String, String>>();
for(int i=0; i<responseObject.length(); i++) 
{                      
    JSONObject obj = responseObject.getJSONObject(i);
    String dmessage= obj.getString("dmessage");
    String message= obj.getString("message");
    String mp3= obj.getString("mp3");
    String userMessageID= obj.getString("user_message_id");
    String category= obj.getString("category");
    String title= obj.getString("title");

    //making use of obtained strings by adding it to some ArrayList to display in the ListView

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

     // adding each child node to HashMap key => value
     map.put("dmessage", dmessage);
     map.put("message", message);
     map.put("mp3", mp3);
     map.put("userMessageID", userMessageID);
     map.put("category", category);
     map.put("title", title);

     // adding HashList to ArrayList
     mp3List.add(map);
}

//you have all the data in mp3List. Display it in ListView
ListAdapter adapter = new SimpleAdapter(this, mp3List, custom_listitem_layout_id, new String[] { "dmessage", "message", "mp3", "userMessageID", "category", "title"}, new int[] { dmessage_textview_id, message_textview_id, mp3_textview_id, userMessageID_textview_id, category_textview_id,title_textview_id });
listview.setAdapter(adapter);
于 2013-04-20T06:26:16.443 回答
0

看看这个并对解析有一些清晰的了解

json解析器

于 2013-04-20T06:27:43.690 回答
0

您需要正确解析。首先将响应转换为字符串,然后将其解析为 JSON 对象。

用这个:

HttpClient mHttpClient = new DefaultHttpClient();
HttpGet mGetMethod = new HttpGet(URL);
HttpResponse mReponseMessage = mHttpClient.execute(mGetMethod);
HttpEntity entity = mResponseMessage.getEntity();
InputStream is = entity.getContent();

接着

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
    sb.append(line + "\n");
}
is.close();
String json = sb.toString();
}
catch(Exception e)
{
 // 
}

下一个,

JSONObject jObj = new JSONObject(json);
responseObject=JObj.getJSONArray("array_name");// if passed as an array
for(int i=0; i<responseObject.length(); i++) {                      
JSONObject obj = responseObject.getJSONObject(i);
String dmessage,message,mp3,user_message_id,category,title;
dmessage= obj.getString("dmessage");
message= obj.getString("message");
mp3= obj.getString("mp3");
user_message_id= obj.getString("user_message_id");
category= obj.getString("category");
title= obj.getString("title");

// here you can add it to the list
}
于 2013-04-20T06:27:58.627 回答