在android联系人中导入重复项

问题描述:

我在android中导入.vcf文件,但它导入重复记录。在android联系人中导入重复项

代码: 方法FO进口接触:

public void doImport(final String fileName, final boolean replace) { 
    try { 

      File vcfFile = new File(fileName); 

      final BufferedReader vcfBuffer = new BufferedReader(new FileReader(fileName)); 



      final long maxlen = vcfFile.length(); 

    // Start lengthy operation in a background thread 
      new Thread(new Runnable() { 
     public void run() { 
      long importStatus = 0; 

      synchronized (syncMonitor) { 
        mAction = Action.IMPORT; 
        syncFileName = fileName; 
        } 

      SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
      SQLiteStatement querySyncId = db.compileStatement("SELECT " + SYNCID + " FROM " + SYNCDATA_TABLE_NAME + " WHERE " + PERSONID + "=?"); 
      SQLiteStatement queryPersonId = db.compileStatement("SELECT " + PERSONID + " FROM " + SYNCDATA_TABLE_NAME + " WHERE " + SYNCID + "=?"); 
      SQLiteStatement insertSyncId = db.compileStatement("INSERT INTO " + SYNCDATA_TABLE_NAME + " (" + PERSONID + "," + SYNCID + ") VALUES (?,?)"); 
      Contact parseContact = new Contact(querySyncId, queryPersonId, insertSyncId); 
        try { 
          long ret = 0; 
          do { 
            ret = parseContact.parseVCard(vcfBuffer); 
            if (ret >= 0) { 
              parseContact.addContact(getApplicationContext(), 0, replace); 
              importStatus += parseContact.getParseLen(); 

              // Update the progress bar 
         // app.updateProgress((int) (100 * importStatus/maxlen)); 
            } 
          } while (ret > 0); 

          db.close(); 
         // app.updateProgress(100); 
        synchronized (syncMonitor) { 
          mAction = Action.IDLE; 
          // showNotification(); 
        } 
       // stopSelf(); 
        } catch (IOException e) { 
        } 
     } 
    }).start(); 


    } catch (FileNotFoundException e) { 
     // app.updateStatus("File not found: " + e.getMessage()); 
    } 
    Toast.makeText(mContext, "Import", Toast.LENGTH_LONG).show(); 

    } 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL("CREATE TABLE " + SYNCDATA_TABLE_NAME + " (" 
        + PERSONID + " INTEGER PRIMARY KEY," 
        + SYNCID + " TEXT UNIQUE" 
        +");"); 
     } 

       @Override 
       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
         // No need to do anything --- this is version 1 

       } 
    } 

Contact.java: Click here Contact.java

代码链路:Click here to get whole code of contact import and export

如何限制到导入重复在上面的代码

感谢Adv。

您应该检查VCard中的字段“X-IRMC-LUID”是否与保存在地址簿中的字段不同。如果它相同,则VCard条目是重复的。

没有关于如何生成这样的字段的说明,并且AFAIK以不同的方式完成,主要是复制UID字段或VCard中的位置。这个开源应用程序包含一些可能有用的代码示例:http://code.google.com/p/vcardio/