如何解决这个错误值必须是?0 但 `getColumnIndex` 可以是 -1

1 java android android-layout firebase

这段代码出现错误

String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

String phoneNo=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
Run Code Online (Sandbox Code Playgroud)
private ArrayList getAllPhoneContacts(){
    ArrayList<String> phoneList = new ArrayList<>();
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if ((cursor !=null ? cursor.getCount() : 0) > 0){
        while(cursor.moveToNext()){
            String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
  
            if (cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0){
                Cursor phoneCursor = contentResolver.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id},null);
                while(phoneCursor.moveToNext()){
                    String phoneNo = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    phoneList.add(phoneNo);
                }
                phoneCursor.close();
            }
        }
    }
    if (cursor !=null){
        cursor.close();
    }
    return phoneList;
}
Run Code Online (Sandbox Code Playgroud)

laa*_*lto 5

这是 Android lint 警告,而不是错误。一些选项:

  1. 抑制警告,例如@SuppressLint("Range")

  2. 使用getColumnIndexOrThrow()而不是getColumnIndex(). 第一个在缺失列上引发异常,后者返回 -1。

  3. 将调用移到getColumnIndex()外部get...()并将索引存储到变量中。这可以防止 lint 发现问题;您也可以自行检查>= 0并采取相应措施。