Android:使用Json从另一个屏幕中的服务器获取listview中的多个数据

时间:2012-07-02 07:58:58

标签: java android json listview

我正在尝试将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;
}

}

1 个答案:

答案 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++;
  }