1、创建所有联系人实体表、群组实体表、关系表:
//所有联系人实体表
db.execSQL("create table user(id integer primary key autoincrement,name varchar(20),phone text,qq text,mail text,address text)");
//群组实体表
db.execSQL("create table groups(groupId integer primary key autoincrement,groupName varchar(20))");
//关系表
db.execSQL("create table relationship(relationshipId integer primary key autoincrement,groupName varchar(20),phone text)");
2、导出方法
//获取群组联系人信息
private void queryGroups() {
DatabaseHelper dbHelper= new DatabaseHelper(MainActivity.this,"test_mars_db",2);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor groupsCursor = db.query("groups", new String[]{"groupId","groupName"}, null, null, null, null, null);
while(groupsCursor.moveToNext()){
System.out.println("groupName:"+groupsCursor.getString(groupsCursor.getColumnIndex("groupName")));
Cursor relationshipCursor = db.query("relationship", new String[]{"phone"}, "groupName=?", new String[]{groupsCursor.getString(groupsCursor.getColumnIndex("groupName"))}, null, null, null);
ArrayList<Person> persons = new ArrayList<Person>();
int id = 0;
while(relationshipCursor.moveToNext()){
Cursor usersCursor = db.query("user", new String[]{"id","name","phone","qq","mail","address"}, "phone=?", new String[]{relationshipCursor.getString(relationshipCursor.getColumnIndex("phone"))}, null, null, null);
Person currentPerson = new Person();
while(usersCursor.moveToNext()){
currentPerson.setId(""+id++);
currentPerson.setName(usersCursor.getString(usersCursor.getColumnIndex("name")));
currentPerson.setPhone(usersCursor.getString(usersCursor.getColumnIndex("phone")));
currentPerson.setQq(usersCursor.getString(usersCursor.getColumnIndex("qq")));
currentPerson.setMail(usersCursor.getString(usersCursor.getColumnIndex("mail")));
currentPerson.setAddress(usersCursor.getString(usersCursor.getColumnIndex("address")));
persons.add(currentPerson);
}
//一个群组生成一个xml文件
createXML(persons, Environment.getExternalStorageDirectory().toString() + "/lin/", groupsCursor.getString(groupsCursor.getColumnIndex("groupName"))+"群组");
}
}
}
2、生成xml文件方法
//生成xml文件
public boolean createXML(List<Person> data, String localDir, String character) {
boolean bFlag = false;
String strTmpName = character + ".xml";
FileOutputStream fileos = null;
File newXmlFile = new File(localDir + strTmpName);
try {
if (newXmlFile.exists()) {
bFlag = newXmlFile.delete();
} else {
bFlag = true;
}
if (bFlag) {
if (newXmlFile.createNewFile()) {
fileos = new FileOutputStream(newXmlFile);
// we create a XmlSerializer in order to write xml data
XmlSerializer serializer = Xml.newSerializer();
// we set the FileOutputStream as output for the serializer,
// using UTF-8 encoding
serializer.setOutput(fileos, "UTF-8");
// <?xml version=”1.0″ encoding=”UTF-8″>
// Write <?xml declaration with encoding (if encoding not
// null) and standalone flag (if stan dalone not null)
// This method can only be called just after setOutput.
serializer.startDocument("UTF-8", null);
// start a tag called "root"
serializer.startTag(null, "Root");
serializer.attribute(null, "character", character);
serializer.startTag(null, "Persons");
for (Person person : data) {
serializer.startTag(null, "Person");
serializer.attribute(null, "id", person.getId()+"");
serializer.attribute(null, "name", person.getName());
serializer.attribute(null, "phone", person.getPhone());
serializer.attribute(null, "qq", person.getQq());
serializer.attribute(null, "mail", person.getMail());
serializer.attribute(null, "address", person.getAddress());
serializer.endTag(null, "Person");
}
serializer.endTag(null, "Persons");
serializer.endTag(null, "Root");
serializer.endDocument();
// write xml data into the FileOutputStream
serializer.flush();
// finally we close the file stream
fileos.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return bFlag;
}
3、添加读写SD卡权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
4、使用
queryGroups();
5、备注
①xml保存在sd卡的lin文件中
②xml文件名为“群组名”+群组