改造错误:- 预期为 BEGIN_ARRAY,但在路径 $ 处为 BEGIN_OBJECT

2023-12-28

我正在尝试使用 Retrofit 和 Moshi 从 API 检索多行,但遇到以下错误:

Retrofit error:- Expected BEGIN_ARRAY but was BEGIN_OBJECT at path$

我请求数据的 API 端点是:https://thecodecafe.in/gogrocer-ver2.0/api/top_ sell https://thecodecafe.in/gogrocer-ver2.0/api/top_selling

这是我用来从 API 请求数据的 Retrofit 和 Moshi 的设置代码:

import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.http.GET

private const val BASE_URL = "https://thecodecafe.in/gogrocer-ver2.0/api/"

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

val retrofit = Retrofit.Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .baseUrl(BASE_URL)
    .build()

interface GroceryApiServices {
    @GET("top_selling")
    fun getProperties():
            Call<List<GroceryProperty>>
}

object GroceryApi {
    val retrofitServices: GroceryApiServices by lazy { retrofit.create(GroceryApiServices::class.java)}
}

这是我的视图模型类的逻辑,显示了我想要如何检索数据:

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.kotlin_developer.grocerysell.network.GroceryApi
import com.kotlin_developer.grocerysell.network.GroceryProperty
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response


class OverviewViewModel: ViewModel() {

    private val _response = MutableLiveData<String>()
    val response: LiveData<String>
        get() = _response

    init {
        getGroceryProperties()
    }

    private fun getGroceryProperties(){
        GroceryApi.retrofitServices.getProperties().enqueue(object : Callback<List<GroceryProperty>>{
            override fun onFailure(call: Call<List<GroceryProperty>>, t: Throwable) {
                _response.value = t.message
            }

            override fun onResponse(
                call: Call<List<GroceryProperty>>,
                response: Response<List<GroceryProperty>>
            ) {
                _response.value="Success ${response.body()?.size} Grocery Property arrived"
            }

        })
    }

    override fun onCleared() {
        super.onCleared()
    }
}

这就是我想要在视图模型类中检索数据的方式

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.kotlin_developer.grocerysell.network.GroceryApi
import com.kotlin_developer.grocerysell.network.GroceryProperty
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response


class OverviewViewModel: ViewModel() {

    private val _response = MutableLiveData<String>()
    val response: LiveData<String>
        get() = _response

    init {
        getGroceryProperties()
    }

    private fun getGroceryProperties(){
        GroceryApi.retrofitServices.getProperties().enqueue(object : Callback<List<GroceryProperty>>{
            override fun onFailure(call: Call<List<GroceryProperty>>, t: Throwable) {
                _response.value = t.message
            }

            override fun onResponse(
                call: Call<List<GroceryProperty>>,
                response: Response<List<GroceryProperty>>
            ) {
                _response.value="Success ${response.body()?.size} Grocery Property arrived"
            }

        })
    }

    override fun onCleared() {
        super.onCleared()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改造错误:- 预期为 BEGIN_ARRAY,但在路径 $ 处为 BEGIN_OBJECT 的相关文章

随机推荐