我试图获取联系人号码和姓名,但遇到错误,显示:
@Composable调用只能从@Composable函数的上下文中发生。
如何解决此问题?
data class Contact(val name: String, val phoneNumber: String)
@Composable
fun ContactList(){
val context = LocalContext.current
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted: Boolean ->
if (isGranted) {
// Permission is granted, fetch the contacts
val contacts = fetchContacts(context)
LazyColumn {
items(contacts) { contact ->
Text(text = "Name: ${contact.name}, Phone: ${contact.phoneNumber}")
Spacer(modifier = Modifier.padding(10.dp))
}
}
} else {
// Handle the case when the user denies the permission
}
}
// Request permission to read contacts
launcher.launch(Manifest.permission.READ_CONTACTS)
}
private fun fetchContacts(context: Context): List<Contact> {
val contacts = mutableListOf<Contact>()
val cursor = context.contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
null,
null,
null
)
cursor?.use {
while (it.moveToNext()) {
val name = it.getString(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
val phoneNumber = it.getString(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
contacts.add(Contact(name, phoneNumber))
}
}
return contacts
}
字符串
1条答案
按热度按时间uyto3xhc1#
rememberLauncherForActivityResult(...)
接受第二个参数onResult
,这只是一个标准回调(不是可组合的)。当你试图调用一个可组合的函数时,(LazyList { ... }
),其中期望的是正常的。我处理这种情况的方法是在本地或在视图模型中更改一些状态变量,当onResult
触发时-然后在UI中侦听此变量的更改,然后在UI中显示惰性列表