将Android联系人导出到XML文件?

时间:2014-03-18 14:10:19

标签: android xml contacts

作为一个小型学校项目,我试图为Android创建一个非常简单的导出应用程序。 首先,我想要导出的是联系人列表 - 然后将其导入另一个设备。 我有两个用于测试的设备 - 一个运行2.2.3,另一个运行4.0.4。

我一直在使用以下代码来完成获取联系人信息,然后将XML文件保存到外部存储:

package com.example.contacts;

import java.util.ArrayList;




import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;


public class MainActivity extends Activity {

String num = "nope";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GetContacts();


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}




public String GetContacts() {


ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
        null, null, null, null);
if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
          String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
          String con = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
          if (Integer.parseInt(cur.getString(
                cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
             Cursor pCur = cr.query(
                       ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                       null,
                       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                       new String[]{id}, null);
             while (pCur.moveToNext()) {
                 String num =             pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                 Log.d("Contacts: ", "Name: " + con + ", Number: " + num);
                 return num;
             }
            pCur.close();
        }
    }
}
return num;

}


}

此代码成功将我的联系人打印到日志中。

下一个代码只是在设备的外部存储(SD卡)上创建一个XML文件 - 取自http://www.anddev.org/write_a_simple_xml_file_in_the_sd_card_using_xmlserializer-t8350.html

package com.example.contacts;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.xmlpull.v1.XmlSerializer;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.widget.TextView;

public class XmlFileCreator extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //create a new file called "new.xml" in the SD card
    File newxmlfile = new File(Environment.getExternalStorageDirectory()+"/new.xml");
    try{
            newxmlfile.createNewFile();
    }catch(IOException e){
            Log.e("IOException", "exception in createNewFile() method");
    }
    //we have to bind the new file with a FileOutputStream
    FileOutputStream fileos = null;        
    try{
            fileos = new FileOutputStream(newxmlfile);
    }catch(FileNotFoundException e){
            Log.e("FileNotFoundException", "can't create FileOutputStream");
    }
    //we create a XmlSerializer in order to write xml data
    XmlSerializer serializer = Xml.newSerializer();
    try {
            //we set the FileOutputStream as output for the serializer, using UTF-8 encoding
                    serializer.setOutput(fileos, "UTF-8");
                    //Write <?xml declaration with encoding (if encoding not null) and standalone     flag (if standalone not null)
                    serializer.startDocument(null, Boolean.valueOf(true));
                    //set indentation option
                    serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-    output", true);
                    //start a tag called "root"
                    serializer.startTag(null, "root");
                    //i indent code just to have a view similar to xml-tree
                            serializer.startTag(null, "child1");
                            serializer.endTag(null, "child1");

                            serializer.startTag(null, "child2");
                            //set an attribute called "attribute" with a "value" for <child2>
                            serializer.attribute(null, "attribute", "value");
                            serializer.endTag(null, "child2");

                            serializer.startTag(null, "child3");
                            //write some text inside <child3>
                            serializer.text("some text inside child3");
                            serializer.endTag(null, "child3");

                    serializer.endTag(null, "root");
                    serializer.endDocument();
                    //write xml data into the FileOutputStream
                    serializer.flush();
                    //finally we close the file stream
                    fileos.close();

            TextView tv = (TextView)this.findViewById(R.id.result);
                    tv.setText("file has been created on SD card");
            } catch (Exception e) {
                    Log.e("Exception","error occurred while creating xml file");
            }
    }
}

现在,我的问题如下: 如何继续将联系人字符串添加到XML文件? 我想我必须添加这样的标签:

starttag:联系人 starttag:名称:endtag starttag:Number:endtag  :endtag

但是如何将这些联系人详细信息写入第一个&#34;联系人的子标签中?标签? 任何参考都很可爱。

1 个答案:

答案 0 :(得分:0)

我会让自己的生活变得更轻松,而不是自己编写XML'字符串'但是使用像simple这样的序列化程序,看一下示例和参考,它真的很容易使用。