Safaricom Daraja API Android初始化失败:类型不匹配问题求助
解决Daraja API初始化的类型不匹配问题
以下是几种可行的修复方式:
1. 对齐平台类型泛型声明
由于DarajaListener通常是Java编写的接口,Kotlin与Java互操作时会产生带!的平台类型。直接将匿名类的泛型参数改为AccessToken!,匹配方法要求的类型:
daraja = Daraja.with("CONSUME_KEY", "CONSUMER_SECRET_KEY", Env.SANDBOX, object : DarajaListener<AccessToken!> { override fun onResult(result: AccessToken!) { result?.let { Toast.makeText(applicationContext, it.access_token, Toast.LENGTH_SHORT).show() } } override fun onError(error: String?) { Toast.makeText(applicationContext, error ?: "未知错误", Toast.LENGTH_SHORT).show() } })
2. 确认AccessToken类的导入
确保你导入的AccessToken是Daraja SDK提供的对应类(比如com.safaricom.daraja.model.AccessToken这类包路径下的类),错误的同名类导入会直接导致类型不匹配。
3. 显式处理可空性
部分场景下,Java接口的泛型参数在Kotlin中会被识别为可空类型,你可以将泛型参数改为AccessToken?并做空值处理:
daraja = Daraja.with("CONSUME_KEY", "CONSUMER_SECRET_KEY", Env.SANDBOX, object : DarajaListener<AccessToken?> { override fun onResult(result: AccessToken?) { result?.access_token?.let { token -> Toast.makeText(applicationContext, token, Toast.LENGTH_SHORT).show() } ?: run { Toast.makeText(applicationContext, "获取令牌失败", Toast.LENGTH_SHORT).show() } } override fun onError(error: String?) { Toast.makeText(applicationContext, error ?: "未知错误", Toast.LENGTH_SHORT).show() } })
另外,若使用的是较新版本的Daraja SDK,可检查是否有更新的初始化方式(比如构建器模式),部分版本会对with()静态方法的参数做调整。
内容的提问来源于stack exchange,提问作者Orwa Ogwari
相关产品推荐
相关产品推荐

