You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio JetPack Compose Kotlin项目中query函数无法导入求助

解决ContentResolver.query无法导入/调用的问题
  • 错误实例化ContentResolver:ContentResolver是抽象类,不能直接通过ContentResolver()创建实例。必须通过上下文(Context)获取,比如在Activity中直接使用contentResolver,或者在其他类中传入Context后调用context.contentResolver。修改后的代码示例:

    // 在Activity内部
    val cursor = contentResolver.query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        null, null, null, null
    )
    
  • 检查导入包是否正确:确保已导入必要的类,若IDE未自动导入,手动添加:

    import android.content.ContentResolver
    import android.provider.ContactsContract.CommonDataKinds.Phone
    
  • 补充动态权限申请(Android 6.0+):即使在AndroidManifest.xml中声明了READ_CONTACTS权限,Android 6.0(API 23)及以上系统仍需动态申请权限才能正常调用查询接口。示例代码:

    // 检查权限状态
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
        // 发起权限请求
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_CONTACTS), 1001)
    } else {
        // 权限已授予,执行通讯录查询
        val cursor = contentResolver.query(Phone.CONTENT_URI, null, null, null, null)
        // 后续处理cursor数据...
    }
    
    // 权限申请结果回调
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 1001 && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限申请成功后执行查询
            val cursor = contentResolver.query(Phone.CONTENT_URI, null, null, null, null)
            // 后续处理cursor数据...
        }
    }
    

内容的提问来源于stack exchange,提问作者user19099753

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:05:43