1. 程式人生 > >關於Android 呼叫通訊錄選擇聯絡人 出現數組越界問題

關於Android 呼叫通訊錄選擇聯絡人 出現數組越界問題

Returns the zero-based index for the given column name, or -1 if the column doesn't exist. If you expect the column to exist use instead, which will make the error more clear.

         文件裡清楚的表明:在要讀取的列不存在的時候該方法會返回值“-1”。所以可知,以上報錯可能是因為要get的列不存在,也可能是因為遊標位置不對。後來發現,因為我在執行這個語句前沒有執行“Cursor.moveToNext();”這個函式,導致遊標還位於第一位置的前面,所以索引顯示為“-1”,前面加上這句就沒錯了。

    網上另有一種情況是用完Cursor沒有關閉導致報此錯誤,所以也提醒各位用完Cursor要記得執行Cursor.close();

/////////////////////帖子結束//////////////////

從通訊錄選擇聯絡人程式碼,希望對需要的人有幫助。

   private String getPhoneNumber(Intent intent){
        Cursor cursor = null;
        Cursor phone = null;
        try{
            String[] projections = {ContactsContract.Contacts._ID,ContactsContract.Contacts.HAS_PHONE_NUMBER
}; cursor = getContentResolver().query(intent.getData(),projections, null, null, null); if (cursor == null && cursor.getCount()<1){ return null; } cursor.moveToNext(); int _id = cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID
); String id = cursor.getString(_id); int has_phone_number = cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER); int hasPhoneNumber = cursor.getInt(has_phone_number); String phoneNumber = null; if(hasPhoneNumber>0){ phone = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null); if (phone!=null) { while (phone.moveToNext()) { int index = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String number = phone.getString(index); phoneNumber = number; } } } return phoneNumber; }catch(Exception e){ // Log.v("TAG",e.getMessage()); }finally{ if (cursor != null) cursor.close(); if(phone != null) phone.close(); } return null; }