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

如何在Kotlin类中初始化接口并向主Activity传递数据?

如何初始化ApiResponseListener接口并传递数据到主Activity

方式1:让主Activity直接实现接口

让主Activity实现ApiResponseListener接口,直接在Activity内部处理回调逻辑,同时将Activity实例作为接口对象传递给需要调用的模块。

// 主Activity实现接口
class MainActivity : AppCompatActivity(), ApiResponseListener {
    override fun didFetch(response: Response<RandomRecipeApiResponse>) {
        // 处理接口返回的成功数据,比如更新UI
    }

    override fun didError(msg: String) {
        // 处理错误信息,比如显示Toast提示
    }

    // 示例:初始化请求模块并传入自身作为接口实例
    private fun startRecipeRequest() {
        val recipeFetcher = RecipeFetcher(this)
        recipeFetcher.fetchRandomRecipe()
    }
}

// 示例请求类,接收ApiResponseListener实例
class RecipeFetcher(private val listener: ApiResponseListener) {
    fun fetchRandomRecipe() {
        // 模拟请求成功
        val mockResponse = Response.success(RandomRecipeApiResponse())
        listener.didFetch(mockResponse)
        
        // 模拟请求失败
        listener.didError("获取食谱失败,请重试")
    }
}

方式2:使用匿名内部类初始化接口

如果不想让Activity实现接口,可通过匿名内部类直接创建ApiResponseListener实例,在回调中处理逻辑(注意更新UI需切换到主线程)。

// 在主Activity中创建接口实例
val apiResponseListener = object : ApiResponseListener {
    override fun didFetch(response: Response<RandomRecipeApiResponse>) {
        runOnUiThread {
            // 处理成功数据,更新UI
        }
    }

    override fun didError(msg: String) {
        runOnUiThread {
            Toast.makeText(this@MainActivity, msg, Toast.LENGTH_SHORT).show()
        }
    }
}

// 直接调用接口方法传递数据
apiResponseListener.didError("test")
apiResponseListener.didFetch(response)

方式3:用Kotlin Lambda简化实现

利用Kotlin特性,将接口包装成接收Lambda的类,简化代码编写:

// 包装类,将接口方法转为Lambda参数
class LambdaResponseListener(
    private val onSuccess: (Response<RandomRecipeApiResponse>) -> Unit,
    private val onFail: (String) -> Unit
) : ApiResponseListener {
    override fun didFetch(response: Response<RandomRecipeApiResponse>) = onSuccess(response)
    override fun didError(msg: String) = onFail(msg)
}

// 在主Activity中使用
val apiResponseListener = LambdaResponseListener(
    onSuccess = { response ->
        // 处理成功数据
    },
    onFail = { msg ->
        // 处理错误信息
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:35:26