2013-08-17 5 views
0

я пытаюсь написать приложение, чтобы прочитать имя, фамилию и идентификатор контакта и показать в ListView, я использую следующий кодAndroid извлекать данные из контакта

 Cursor cursor = getContentResolver().query(
        ContactsContract.Contacts.CONTENT_URI, null, null, 
        null, null); 
      SmsMultiCasting.selectedRow = new int[cursor.getCount()]; 
      cursor.moveToFirst(); 
      // data = new String[cursor.getCount()][12]; 
      if (cursor.getCount() > 0) { 
       do { 

        try { 
         i++; 
         Log.d("number", String.valueOf(i)); 
         // numberPhone = 0; 
         contactId = cursor 
           .getString(cursor 
             .getColumnIndex(ContactsContract.Contacts._ID)); 

         Uri contactUri = ContentUris.withAppendedId(
           Contacts.CONTENT_URI, 
           Long.parseLong(contactId)); 
         Uri dataUri = Uri.withAppendedPath(contactUri, 
           Contacts.Data.CONTENT_DIRECTORY); 

         Cursor phones = getContentResolver() 
           .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
             null, 
             ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
               + " = " + contactId, null, 
             null); 
         int phonenumber = 0; 
         while (phones.moveToNext()) { 
          phonenumber++; 
         } 

         if (phonenumber > 0) 
         // phones.moveToNext(); 
         { 

          try { 
           Cursor nameCursor = getContentResolver() 
             .query(dataUri, 
               null, 
               Data.MIMETYPE + "=?", 
               new String[] { StructuredName.CONTENT_ITEM_TYPE }, 
               null); 
           nameCursor.moveToFirst(); 
           do { 

            String firstName = nameCursor 
              .getString(nameCursor 
                .getColumnIndex(Data.DATA2)); 

            String lastName = ""; 

            String displayname = cursor 
              .getString(cursor 
                .getColumnIndex(Contacts.DISPLAY_NAME_ALTERNATIVE)); 
            if (!firstName.equals(displayname)) { 
             lastName = nameCursor 
               .getString(nameCursor 
                 .getColumnIndex(Data.DATA3)); 
            } 

            if (firstName.equals(null) 
              && lastName.equals(null)) 
             SmsMultiCasting.Arrayefullname 
               .add("unknown name"); 
            else if (firstName.equals(null)) 
             SmsMultiCasting.Arrayefullname 
               .add(lastName); 
            else if (lastName.equals(null)) 
             SmsMultiCasting.Arrayefullname 
               .add(firstName); 
            else 
             SmsMultiCasting.Arrayefullname 
               .add(firstName + " " 
                 + lastName); 
             SmsMultiCasting.Arrayeid.add(String 
              .valueOf(firstName + " " 
                + lastName + "//" 
                + contactId)); 

           } while (nameCursor.moveToNext()); 
           nameCursor.close(); 
          } catch (Exception e) { 
          } 
         } 
        } 

        catch (Exception t) { 
        } 

         String image_uri = cursor 
           .getString(cursor 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
         SmsMultiCasting.ArrayePhoto.add(image_uri); 
       */  

       } while (cursor.moveToNext()); 

, но этот код в большой дате дает ошибку мне , как я могу использовать более легкий код для получения данных ???

+0

возможно дубликат [как получить андроид данных списка контакта на моем Seperate listview в android 2.1?] (http://stackoverflow.com/questions/7803 633/how-to-get-android-contact-list-data-on-my-seperate-listview-in-android-2-1) –

+0

Я могу получить данные, но мне нужен код, который либо в больших данных работает нормально –

+0

Эта ссылка может помочь: [http://stackoverflow.com/questions/4330565/using-cursor-with-listview-adapter-for-a-large-amount-of-data][1] [1]: http://stackoverflow.com/questions/4330565/using-cursor-with-listview-adapter-for-a-large-amount-of-data –

ответ

0
+0

, но мой код верен, и когда я сталкиваюсь с эмулятор работает нормально, но в реальном устройстве и больших данных (260 контактов) произойдет сбой –

Смежные вопросы