Android使用JsonObject内容创建JsonArrays

时间:2016-10-14 14:46:08

标签: android

当我尝试将其创建为

时,我正在尝试使用一些JsonArray创建简单的JsonObject和一些移动号码
["data":{"contactName":"xxxxx", "mobileNumber":"0000}]

格式化为while

我的json对象长度是1,我检查了while语句并且它的工作正常没有任何问题但是每个数据都放在json对象上,并且长度为1

public static JSONArray getLocalContactsList(ContentResolver cr) throws JSONException {

    JSONArray  contacts = new JSONArray();
    JSONObject contact  = new JSONObject();

    Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    while (phones.moveToNext()) {
        final String name         = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String       phone_number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        phone_number = phone_number.replaceAll("\\s+", "").trim();
        phone_number = phone_number.replace("-", "").trim();

        if (phone_number.startsWith("+")) {
            phone_number = phone_number.substring(3, phone_number.length());
            phone_number = "0" + phone_number;
        }
        if (phone_number.startsWith("0")) {
            JSONObject c = new JSONObject();
            c.put("contactName", name);
            c.put("mobileNumber", phone_number);
            contact.put("data", c);
        }
    }
    contacts.put(contact);
    phones.close();
    return contacts;
}

问题是代码的这一部分:

JSONObject c = new JSONObject();
c.put("contactName", name);
c.put("mobileNumber", phone_number);
contact.put("data", c);

1 个答案:

答案 0 :(得分:3)

问题是在循环完成处理所有项目之后,只向JSONArray添加一次联系。只需将contacts.put(contact);移动到循环中,就像那样:

while (phones.moveToNext()) {
    final String name         = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    String       phone_number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    phone_number = phone_number.replaceAll("\\s+", "").trim();
    phone_number = phone_number.replace("-", "").trim();

    if (phone_number.startsWith("+")) {
        phone_number = phone_number.substring(3, phone_number.length());
        phone_number = "0" + phone_number;
    }
    if (phone_number.startsWith("0")) {
        JSONObject c = new JSONObject();
        c.put("contactName", name);
        c.put("mobileNumber", phone_number);
        contact.put("data", c);
    }
    // the next line should be inside the loop
    contacts.put(contact);
}

正如npace所指出的,这应该可以修复错误,但不能解决整个问题。考虑使用GSON库来处理将内容转换为JSONObjectJSONArray的任务