当前位置: 首页 > 知识库问答 >
问题:

如何正确使用suspend fun在与kotlin的改良2.6.0系列中的应用

秦时铭
2023-03-14

我正在尝试编写我的网络请求,以使用改版2.6.0和coroutines暂停乐趣。但我总是得到空对象。这是我第一次尝试改装2.6和coroutines

这是我的示例代码

数据类

data class ProjectList (val data: List<Project>)

示例JSON对象

{
    "data": [
        {
            "project_id": "10824",
            "project_name": "Bendor Project",
            "project_number": "P010824",
            "content_items": [
                {
                    "content_id": "235",
                    "content_name": "Longonot Project",
                    "content_description": "Valves Example ",
                    "content_date_updated": "2019-08-31 12:29:00",
                    "project_id": "10824",
                    "media_items": []


网络接口

    suspend fun getProjects(@Query("mode") mode: String): ProjectList

改装客户端

class RetrofitClient{


    private val gson = GsonBuilder()
        .setLenient()
        .create()


    private fun retrofit(): Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build()

    val retrofitService: ProjectAPI by lazy {
        retrofit().create(ProjectAPI::class.java)
    }

存储库

class ProjectRepository {

    private val client: ProjectAPI = RetrofitClient().retrofitService

    suspend fun getProjectData(mode : String) : ProjectList = client.getProjects(mode)

}

ViewModel中的livedata

val request : LiveData<ProjectList> = liveData(Dispatchers.IO){
            val response = repository.getProjectData(SOURCE_MODE)
            Log.e(TAG, "${response.data}")
            emit(response)
        }

我一直得到空响应。我哪里做得不对?

共有1个答案

慕河
2023-03-14

您不需要发出值,只需在协同作用域中调用挂起函数,然后在ViewModel中创建一个新的LiveData,最后调用LiveData.post()以便能够将网络请求的响应分配给LiveData对象。

 类似资料:
  • echo y“current_path\pscp.exe”-sftp-p 22-pw“password”“local\path\to\file.txt”some_server@server.com:/server/path/to/file.txt 如何更改或更新该文件,使其与以下文件兼容: 允许的SSH密码:aes256-cbc、aes256-ctr

  • 我正在尝试使用SimpleXML将改装xml响应序列化到一个对象中。 但是出现以下例外情况: org.simpleframework.xml.core.值必需异常:无法满足@org.simpleframework.xml.ElementList(data=false,空=true,入口=,内联=true,名称=ALLFile,必需=true,类型=无效)字段'file" 响应示例: 对象: 我收到

  • 我刚刚开始使用覆盖率。于是决定做一个简单的测试来检查它是如何工作的。 Sample.py 测验派克 如您所见,我所有的代码都覆盖了测试,py.test说它们都通过了。我希望Coverage.py显示100%的覆盖率。嗯,不。 然后我添加了这段代码: 并删除了所有测试功能。在那之后,是保险范围。py显示100%: 为什么会这样?我们不应该买保险。py显示代码测试覆盖率,而不仅仅是执行覆盖率?我读过官

  • 问题内容: 从官方教程中: 在卸载和销毁组件之前立即调用。使用此方法执行任何必要的清除,例如使计时器无效,取消网络请求或清除在其中创建的所有DOM元素。 我了解“使计时器无效”。可以用终止。但是我不理解“清理在中创建的任何DOM元素”,我可以看到这种情况的示例吗? 问题答案: 如果网络请求发送库支持中止正在进行的网络请求调用,则绝对可以在方法中调用该请求。 但是,与清理元素有关。根据目前的经验,我

  • 问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost