Android Studio集成OneSignal时r.getData()类型不匹配问题求解
解决OneSignal requestPermission回调中getData()类型不匹配问题
问题出在r.getData()返回的是Object类型,直接用于if条件判断时会触发类型不兼容错误——Java/Kotlin无法直接将Object当作boolean使用。
解决方案
Java 代码修复
将r.getData()显式转换为Boolean类型,同时增加空值判断避免空指针异常:
OneSignal.getNotifications().requestPermission(Continue.with(r -> { if (r.isSuccess()) { Boolean permissionGranted = (Boolean) r.getData(); if (permissionGranted != null && permissionGranted) { // `requestPermission`成功,用户已接受权限 } else { // `requestPermission`成功,但用户拒绝了权限 } } else { // `requestPermission`失败,通过`r.getThrowable()`查看失败原因 } }));
Kotlin 代码修复
利用Kotlin的智能转换,将返回值转为Boolean?后再判断:
OneSignal.getNotifications().requestPermission(Continue.with { r -> if (r.isSuccess) { val permissionGranted = r.data as Boolean? if (permissionGranted == true) { // `requestPermission`成功,用户已接受权限 } else { // `requestPermission`成功,但用户拒绝了权限 } } else { // `requestPermission`失败,通过`r.throwable`查看失败原因 } })
补充说明
OneSignal的Continue回调设计为通用型,getData()返回Object以适配不同接口的返回数据,但requestPermission接口的成功回调确实会返回Boolean类型,因此显式类型转换是安全的。
内容的提问来源于stack exchange,提问作者Rohit Kumar
相关产品推荐
相关产品推荐

