如何使用 kotlin 在 Retrofit 2.6.0 协程中正确使用 suspend fun
How to correctly use suspend fun in Retrofit 2.6.0 coroutines with kotlin
我正在尝试编写我的网络请求以使用 Retrofit 2.6.0 和协程暂停乐趣。但我不断得到空对象。这是我第一次尝试改造 2.6 和协程
这是我的示例代码
数据class
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 中的实时数据
val request : LiveData<ProjectList> = liveData(Dispatchers.IO){
val response = repository.getProjectData(SOURCE_MODE)
Log.e(TAG, "${response.data}")
emit(response)
}
我一直收到空响应。我哪里不对?
您不需要发出值,只需在协程范围内调用您的 suspend func
,然后在您的 ViewModel
中创建一个新的 LiveData
,最后调用 liveData.post () 以便能够将网络请求的响应分配给您的 LiveData
对象。
我正在尝试编写我的网络请求以使用 Retrofit 2.6.0 和协程暂停乐趣。但我不断得到空对象。这是我第一次尝试改造 2.6 和协程
这是我的示例代码
数据class
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 中的实时数据
val request : LiveData<ProjectList> = liveData(Dispatchers.IO){
val response = repository.getProjectData(SOURCE_MODE)
Log.e(TAG, "${response.data}")
emit(response)
}
我一直收到空响应。我哪里不对?
您不需要发出值,只需在协程范围内调用您的 suspend func
,然后在您的 ViewModel
中创建一个新的 LiveData
,最后调用 liveData.post () 以便能够将网络请求的响应分配给您的 LiveData
对象。