我正在尝试将jsonobject放入下一个屏幕列表视图中。我可以在listview中获得1个值,但我有多个值要获取。我能怎么做。
这是我从服务器获取字符串的代码: -
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("Get_Friend_List", holder
.toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
StringEntity se = new StringEntity(holder.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
httppost.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
resp = response.toString();
String t = EntityUtils.toString(response.getEntity());
try {
JSONArray get_string1 = new JSONArray(t);
JSONObject get_string = null;
// Receive the JSON object from server
String userid = (String) get_string.get("UserId");
String totalusers = (String) get_string.get("TotalUsers");
String SessionID = (String) get_string.get("SessionID");
for (int i = 0; i < get_string1.length(); i++) {
get_string = get_string1.getJSONObject(i);
JSONObject contact = (JSONObject) get_string
.get("contacts-" + i);
String contact_id = (String) contact.get("UserId");
contact_username = (String) contact.get("UserName");
contact_status = (String) contact.get("Status");
Contacts.setStatus(contact_status, i);
Contacts.setUserName(contact_username, i);
}
} catch (JSONException e) {
e.printStackTrace();
System.out.println("--error--" + e.getMessage());
}
} catch (ClientProtocolException e) {
Log.e(TAG, e.toString());
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
这是我收到的服务器响应。 但仅在listview中存储最后一个值。
Response from Server----{
"UserId": "1",
"TotalUsers": "4",
"contacts-0": {
"UserId": "3",
"UserName": "kumar",
"Status": "1"
},
"contacts-1": {
"UserId": "2",
"UserName": "rahul",
"Status": "1"
},
"contacts-2": {
"UserId": "4",
"UserName": "vlk",
"Status": "1"
},
"contacts-3": {
"UserId": "5",
"UserName": "vlk",
"Status": "1"
},
"SessionID": "39355"
}
contacts.java
public class Contacts {
public static String[] status = new String[100];
public static String[] usrname = new String[100];
public static String getStatus(int i) {
return status[i];
}
public static String getUserName(int i) {
return usrname[i];
}
public static void setStatus(String status, int i) {
Contacts.status[i] = status;
}
public static void setUserName(String username, int i) {
Contacts.usrname[i] = username;
}
}
答案 0 :(得分:1)
json String没有数组类型。在阅读has()
对象之前,需要调用contacts
方法(以测试json属性是否存在)。另一个问题是Contacts
类型。您必须定义Contact
类型并初始化List<Contact>
以存储一个或多个联系人。
查看Contact类
public class Contact
{
private String userId;
private String userName;
private String status;
public Contact() {
userId="";
userName="";
status="";
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "Contact{" + "userId=" + userId + ", userName=" + userName + ", status=" + status + '}';
}
}
用于读取/解析json
字符串的代码。
JSONObject get_string = new JSONObject(t);
String userid = (String) get_string.get("UserId");
String totalusers = (String) get_string.get("TotalUsers");
String SessionID = (String) get_string.get("SessionID");
int i=0;
JSONObject obj=null;
/* Initialize the List<Contact> */
List<Contact> list=new ArrayList();
while(get_string.has("contacts-"+i))
{
obj=get_string.getJSONObject("contacts-" + i);
Contact contact=new Contact();
contact.setUserId(obj.getString("UserId"));
contact.setUserName(obj.getString("UserName"));
contact.setStatus(obj.getString("Status"));
list.add(contact);
i++;
}