2014-08-28 4 views
0

Я создал приложение, в котором мне нужны все контакты, доступные в телефонной книге. Я показываю эти числа в списке. Приложение работает нормально, но иногда действие приложения закрывается, потому что курсор возвращает null.Это не всегда, но это случается несколько раз. Теперь, как я могу справиться с этим ????Получение всех контактов с телефона иногда возвращает NULL

Код

public static JSONArray getAllContactList(Context context) { 
     Cursor c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     alAllContacts = new ArrayList<ContactModel>(); 
     while (!(c == null) && c.moveToNext()) { 
      String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
      String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

      if (number.equalsIgnoreCase("1")) { 
//     Cursor phones = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
//       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = '" + id + "'", null, null); 

       Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null); 


       while (phones.moveToNext()) { 

        String contactName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
        String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

        contactNumber = contactNumber.replace("+", ""); 

        if (contactNumber.length() > 10) { 
         contactNumber = contactNumber.substring(2); 
        } 
//     contactNumber.replace("+91", ""); 
        alAllContacts.add(new ContactModel(contactName, contactNumber)); 

// 
       } 

      } 


     } 
     c.close(); 


     JSONArray jsonArray = new JSONArray(); 
     for (int i = 0; i < alAllContacts.size(); i++) { 
      jsonArray.put(alAllContacts.get(i).getJSONObject()); 
     } 


     return jsonArray; 

    } 

LogCat говорит, что я получаю нулевой указатель на этой линии

while (phones.moveToNext()) { 

Также несколько раз я получить принудительное закрытие, потому что диалог работает, так мой код для отображения индикатора выполнения правильно

public static void showProgress(Context context, String msg, boolean isVisible) { 


     if (progressDialog == null) { 
      progressDialog = new ProgressDialog(context); 
      progressDialog.setMessage(msg); 
      progressDialog.setCancelable(false); 
     } 

     if (isVisible) { 
      progressDialog.show(); 
     } else if (isVisible == false) { 
      if (progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
      } 
     } 

    } 
+0

смотрите мою ссылку, чтобы получить контакты http://stackoverflow.com/questions/19972085/android-display-contacts- of-type-custom/19972249 # 19972249 –

+0

@BhanuSharma Sir Я правильно получаю контакты, но некоторое время я получаю нулевой указатель, так как я могу обработать этот нулевой указатель – user3917131

+0

, как обрабатывать исключение из null-указателя? while (phones! = null && phones.moveToNext()) – pskink

ответ

0

Я использую этот код для получения всех контактов, и он выполняет эту работу.

private static void backupContacts(Context context) { 

    String[] pCurProjection = new String[]{ 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.TYPE, 
      ContactsContract.CommonDataKinds.Phone.LABEL, 
      ContactsContract.CommonDataKinds.Phone.IS_PRIMARY 
    }; 

    String contactSelection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; 

    String[] contactProjection = new String[]{ 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 

    Cursor contactCursor = context.getContentResolver().query(
      ContactsContract.Contacts.CONTENT_URI, 
      contactProjection, 
      contactSelection, 
      null, 
      ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

    int contactId; 
    String contactName; 
    if (null != contactCursor) { 
     while (contactCursor.moveToNext()) { 

      contactId = contactCursor.getInt(
        contactCursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      contactName = contactCursor.getString(
        contactCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

      System.out.println(contactId + ": " + contactName); 

      Cursor pCur = context.getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        pCurProjection, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
        new String[]{String.valueOf(contactId)}, 
        null); 

      if (null != pCur) { 
       while (pCur.moveToNext()) { 

        int id = pCur.getColumnIndex(
          ContactsContract.CommonDataKinds.Phone._ID); 

        String number = (pCur.getString(
          pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
        String type = pCur.getString(
          pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));//this line returns Null but it does not effect on the code(Does not Throws NullPointerException). if you found fix for it please let me know 
        int isPrimary = pCur.getInt(
          pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY)); 

        System.out.println(id + ": " + number + "\n" + type + "\n" + isPrimary); 
       } 
       pCur.close(); 
      } 
     } 
     contactCursor.close(); 
    } 
} 

если у вас есть какие-либо вопросы, дайте мне знать :)

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