Autore Topic: Ricevere dettaglio contatti  (Letto 231 volte)

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Ricevere dettaglio contatti
« il: 24 Settembre 2015, 21:08:46 CEST »
0
salve a tutti , è diverso tempo che riscontro problemi nell ottenere le informazioni dei contatti , ho sempre rimandato il problema ma ora mi tocca risolverlo sul serio ...
ho la necessità di avere le seguenti informazioni " NOME , NUMERO , EMAIL , FOTO "
e attualmente utilizzo questo metodo
Codice (Java): [Seleziona]
private boolean getContactsDetails() {
            try {
                String image_uri = "";
                String Email = "";
                String Number = "";
                String Name = "";
                ContentResolver cr = mContext.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));
                        Name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                        image_uri = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
                        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()) {
                                Number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            }
                            pCur.close();
                            Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);
                            while (emailCur.moveToNext()) {
                                Email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                                String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                            }
                            emailCur.close();
                        }
                        Name.replace("(", "");
                        Name.replace(")", "");
                        Name.replace("'", "");
                        Name.replace("", "");
                        //  clientes.add(new Cliente(Name, Number, Email, image_uri));
                        if (image_uri == null) image_uri = "null";
                        if (Name == null) Name = "";
                        if (Number == null) Number = "";
                        if (Email == null) Email = "";
                        Log.e("Contacts ->", Name + "\n" + Number + "\n" + Email + "\n" + image_uri);
                        Cliente tmpCliente = db.getClienteByNumber(Number);
                        if (tmpCliente==null)
                             db.createCliente(new Cliente(Name, Number, Email, image_uri));
                    }
                    return true;
                } else return false;
            }catch (Exception e){
                e.printStackTrace();
                return false;
            }

        }
    }

come si nota alla fine di tutto importo il tutto sul database locale , e devo dire che funziona abbastanza ... ma se si hanno 300 contatti ... bhè ci impiega circa 1 minuti , che mi sembra già eccessivo , nel caso in cui siano di più .... diventa davvero un processo lungo ... cercando in giro ho trovato esempi in cui con un unica query si ottiene il risultato voluto in tempistiche di ms , ma nessun esempio è completo che mi mostra i dati che a me interessano, qualcuno si è già trovato in una situazione simile ?  :-o