JsonWriter的使用

来源:互联网 发布:java网络编程视频教程 编辑:程序博客网 时间:2024/06/04 00:23

这个例子主要是利用JsonWriter把联系人的信息写入到文件流中,注(JsonWriter必须在Api level 11以后才可以使用):


JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));



// 获得所有联系人
Cursor cur = context.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC");
// 遍历联系人
if (cur != null && cur.moveToFirst()) {
int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);


int displayNameColumn = cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
writer.setIndent(" ");
writer.beginObject();
writer.name(ContactStruct.CONTACTS);
writer.beginArray();
do {
writer.beginObject();
// 取得联系人_id号
String contactId = cur.getString(idColumn);
writer.name(ContactStruct._ID).value(contactId);
// 取得联系人姓名
String disPlayName = cur.getString(displayNameColumn);
writer.name(ContactStruct.NAME).value(disPlayName);


// 取得联系人的电话的数量
int phoneCount = cur
.getInt(cur
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
Log.i("username", disPlayName);
if (phoneCount > 0) {
// 取得联系人电话号码
Cursor phones = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
if (phones != null && phones.moveToFirst()) {
writer.name(ContactStruct.PHONENUMBERS);
writer.beginArray();
do {
writer.beginObject();
// 遍历联系人电话号码
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String phoneType = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
writer.name(ContactStruct.TYPE).value(phoneType);
writer.name(ContactStruct.PHONENUMBER).value(
phoneNumber);
writer.endObject();
Log.i("phoneNumber", phoneNumber + "");
Log.i("phoneType", phoneType + "");
} while (phones.moveToNext());
writer.endArray();
}
closeCursor(phones);
}


// 取得联系人的邮箱地址
Cursor emails = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
if (emails != null && emails.moveToFirst()) {
writer.name(ContactStruct.EMAILS);
writer.beginArray();
do {
writer.beginObject();
// 遍历联系人的邮箱
String emailType = emails
.getString(emails
.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
String emailValue = emails
.getString(emails
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
writer.name(ContactStruct.TYPE).value(emailType + "");
writer.name(ContactStruct.DATA).value(emailValue);
writer.endObject();
Log.i("emailType", emailType + "");
Log.i("emailValue", emailValue + "");
} while (emails.moveToNext());
writer.endArray();
}
closeCursor(emails);


// 取得联系人的IM号
Cursor IMs = context.getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID, Im.PROTOCOL, Im.DATA },
Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
+ Im.CONTENT_ITEM_TYPE + "'",
new String[] { contactId }, null);
// 遍历联系人的IM号
if (IMs != null && IMs.moveToFirst()) {
writer.name(ContactStruct.IMS);
writer.beginArray();
do {
String protocol = IMs.getString(IMs
.getColumnIndex(Im.PROTOCOL));
String data = IMs
.getString(IMs.getColumnIndex(Im.DATA));
writer.beginObject();
writer.name(ContactStruct.PROTOCOL).value(protocol);
writer.name(ContactStruct.DATA).value(data);
writer.endObject();
Log.i("protocol", protocol + "");
Log.i("data", data + "");
} while (IMs.moveToNext());
writer.endArray();
}
closeCursor(IMs);


// 取得联系人的地址
Cursor address = context
.getContentResolver()
.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
if (address != null && address.moveToFirst()) {
writer.name(ContactStruct.POSTALADDRESS);
writer.beginArray();
do {
// 遍历联系人的地址
String street = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String city = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String region = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
String postCode = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
String country = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
writer.beginObject();
writer.name(ContactStruct.STREET).value(street);
writer.name(ContactStruct.CITY).value(city);
writer.name(ContactStruct.REGION).value(region);
writer.name(ContactStruct.POSTCODE).value(postCode);
writer.name(ContactStruct.COUNTRY).value(country);
writer.endObject();
Log.i("street", street + "");
Log.i("city", city + "");
Log.i("region", region + "");
Log.i("postCode", postCode + "");
Log.i("formatAddress", country + "");
} while (address.moveToNext());
writer.endArray();
}
closeCursor(address);
// 取得联系人的组织
Cursor organizations = context.getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID, Organization.COMPANY,
Organization.TITLE },
Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
+ Organization.CONTENT_ITEM_TYPE + "'",
new String[] { contactId }, null);
// 遍历联系人的组织
if (organizations != null && organizations.moveToFirst()) {
writer.name(ContactStruct.ORGANIZATION);
writer.beginObject();
String company = organizations.getString(organizations
.getColumnIndex(Organization.COMPANY));
String title = organizations.getString(organizations
.getColumnIndex(Organization.TITLE));
writer.beginObject();
writer.name(ContactStruct.COMPANY).value(company);
writer.name(ContactStruct.TITLE).value(title);
writer.endObject();
Log.i("company", company + "");
Log.i("title", title + "");
}
closeCursor(organizations);


Cursor notes = context.getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID, Note.NOTE },
Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
+ Note.CONTENT_ITEM_TYPE + "'",
new String[] { contactId }, null);
if (notes != null && notes.moveToFirst()) {
do {
String noteinfo = notes.getString(notes
.getColumnIndex(Note.NOTE));
Log.i("noteinfo", noteinfo + "");
writer.name(ContactStruct.NOTE).value(noteinfo);
} while (notes.moveToNext());
}
closeCursor(notes);
// 取得联系人的昵称
Cursor nicknames = context.getContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID, Nickname.NAME },
Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"
+ Nickname.CONTENT_ITEM_TYPE + "'",
new String[] { contactId }, null);
if (nicknames != null && nicknames.moveToFirst()) {
do {
String nickname = nicknames.getString(nicknames
.getColumnIndex(Nickname.NAME));


Log.i("nickname", nickname + "");
writer.name(ContactStruct.NICKNAME).value(nickname);
} while (nicknames.moveToNext());
}
closeCursor(nicknames);
writer.endObject();
} while (cur.moveToNext());
closeCursor(cur);
writer.endArray();
writer.endObject();
writer.flush();
writer.close();
}