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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:10:29