2012-03-20 12 views
2

Androidの.vcfファイルをインポートしていますが、重複したレコードをインポートしています。アンドロイドの連絡先に重複をインポートする

コード:

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

コードリンク:インポート接触FO 方法上記のコードでは重複をインポートするために制限する方法Click here to get whole code of contact import and export

先生のおかげです。

答えて

0

VCardのフィールド「X-IRMC-LUID」がアドレス帳に保存されているフィールドと同じでないことを確認する必要があります。同じものであれば、VCardエントリは重複しています。

このようなフィールドの生成方法に関する仕様はなく、AFAIKはさまざまな方法で行われ、ほとんどがUIDフィールドやVCard内の位置を複製します。このオープンソースアプリには、便利なコード例がいくつか含まれています:http://code.google.com/p/vcardio/

関連する問題