2010-12-01 45 views
1

我现在面临的一个基本问题,但我没有 为了帮我找到任何教程...与保存DATAS选项联系API问题

我正在写有几分备份联系人选项的应用。我想 ,我的应用程序适用于Android手机1.5至2.2

因此,我写了两个实现ContactApi,一个用于1.5,1.6和一个 其他新的api版本。

以下是我遇到的问题列表。

随着新的api,什么都没有。一切正常,备份联系人效果很好。

但与旧的API,我不能备份一些DATAS:

  • 电子邮件DATAS(能读,但是不能保存)
  • IM DATAS(能读,但不能够保存)
  • 注意事项(能读的第一个音符,如果有很多的笔记,我失去了DATAS, 备份同样的事情)

这里是我使用的代码:

======= EMAIL =======

private ArrayList<Email> getEmailAddresses(String id) { 
      ArrayList<Email> emails = new ArrayList<Email>(); 
      Cursor emailCur = this.contentResolver.query(Contacts.ContactMethods.CONTENT_EMAIL_URI, null, Contacts.ContactMethods.PERSON_ID + " = ?", new String[] { id }, null); 
      Email email = null; 
      while (emailCur.moveToNext()) { 
        // This would allow you get several email addresses 
        email = new Email(); 
        email.setData(emailCur.getString(emailCur.getColumnIndex(Contacts.ContactMe thods.DATA))); 
        email.setType(emailCur.getInt(emailCur.getColumnIndex(Contacts.ContactMetho ds.TYPE))); 
        email.setLabel(emailCur.getString(emailCur.getColumnIndex(Contacts.PeopleCo lumns.NAME))); 
        emails.add(email); 
      } 
      emailCur.close(); 
      return emails; 
    } 
private void saveEmailAddresses(ContentUris contactUri, List<Email> emailList, String id) { 
      if (emailList != null && emailList.size() > 0) { 
        ContentValues values = null; 
        ContentValues[] valueArray = new ContentValues[emailList.size()]; 
        int i = 0; 
        for (Email email : emailList) { 
          values = new ContentValues(); 
          values.put(Contacts.ContactMethods.PERSON_ID, id); // 
          values.put(Contacts.ContactMethods.KIND, Contacts.KIND_EMAIL); // 
          values.put(Contacts.ContactMethods.DATA, email.getData()); // 
          values.put(Contacts.ContactMethods.TYPE, email.getType()); // 
          values.put(Contacts.PeopleColumns.NAME, email.getLabel()); // 
          valueArray[i] = values; 
          i++; 
        } 
        contentResolver.bulkInsert(Contacts.ContactMethods.CONTENT_EMAIL_URI, valueArray); 
      } 
    } 

======== IM ADRESS =============

private ArrayList<IM> getIM(Cursor cur, String id) { 
       ArrayList<IM> imList = new ArrayList<IM>(); 
       String where = Contacts.ContactMethods.PERSON_ID + " = ? AND " +  Contacts.ContactMethods.KIND + " = ?"; 
       String[] whereParameters = new String[] { id, 
String.valueOf(Contacts.KIND_IM) }; 
       Cursor imCur = 
this.contentResolver.query(Contacts.ContactMethods.CONTENT_URI, null, 
where, whereParameters, null); 
       IM im = null; 
       while (imCur.moveToNext()) { 
         try { 
           String imName = 
imCur.getString(imCur.getColumnIndex(Contacts.ContactMethodsColumns.DATA)); 
             im = new IM(); 
             im.setName(imName); 
im.setType(imCur.getInt(imCur.getColumnIndex(Contacts.ContactMethodsColumns .TYPE))); 
im.setProtocol(cur.getString(imCur.getColumnIndex(Contacts.ContactMethods.A UX_DATA))); 
             imList.add(im); 
         } catch (Exception e) { 
           Log.e(where, "Error im : ", e); 
         } 
       } 
       imCur.close(); 
       return imList; 
     } 
     private void saveIM(List<IM> imList, String id) { 
       if (imList != null && imList.size() > 0) { 
         ContentValues values = null; 
         ContentValues[] valueArray = new ContentValues[imList.size()]; 
         int i = 0; 
         for (IM im : imList) { 
           values = new ContentValues(); 
           values.put(Contacts.ContactMethods.PERSON_ID, id); // 
           values.put(Contacts.ContactMethods.KIND, Contacts.KIND_IM); // 
           values.put(Contacts.ContactMethodsColumns.DATA, im.getName()); // 
           values.put(Contacts.ContactMethods.AUX_DATA, 
ContactMethods.encodeCustomImProtocol(im.getProtocol())); // 
           values.put(Contacts.ContactMethodsColumns.TYPE, im.getType()); // 
           valueArray[i] = values; 
           i++; 
         } 
         contentResolver.bulkInsert(Contacts.ContactMethods.CONTENT_URI, 
valueArray); 
       } 
     } 

==========注意=======

我不知道如何让所有的音符?

有人可以帮助我吗?

回答

0
public static HashMap Parse(String XML, String Tag, ArrayList<String> NodesList) 
{   
    HashMap v = new HashMap();   
    try 
    { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(XML)); 
     Document doc = db.parse(is); 
     doc.getDocumentElement().normalize();    
     NodeList nodeLst = doc.getElementsByTagName(Tag);    
     nodeCount = nodeLst.getLength(); 
     for (int s = 0; s < nodeCount; s++) 
     { 
      Node fstNode = nodeLst.item(s); 

      if (fstNode.getNodeType() == Node.ELEMENT_NODE) 
      {     
      Element fstElmnt = (Element) fstNode; 

      for(String nodeName : NodesList) 
      { 
       NodeList fstNmElmntLst = fstElmnt.getElementsByTagName(nodeName); 
       Element fstNmElmnt = (Element) fstNmElmntLst.item(0); 
       NodeList fstNm = fstNmElmnt.getChildNodes(); 
       try { 
        String NodeValue = ((Node) fstNm.item(0)).getNodeValue().toString().trim(); 
        if(NodeValue !=null) 
         v.put(nodeName + s, NodeValue); 
       } 
       catch(Exception e) { 
        v.put(nodeName + s, ""); 
       } 
      } 

      } 
     } 
    } 
    catch (Exception e) 
    { 
     //e.printStackTrace(); 
    } 

    return v; 
}