因此,我是一名开始的android开发人员,并且我正在使用retrofit2对我的API执行GET请求。但是我得到了一个“预期的begin_array但不是begin_object”。
我尝试在许多网站上阅读有关此问题的信息,但对我来说,其中没有一个对您有用,包括改造文档。
我尝试在kotlin中创建POJO类,并遵循此教程:https://www.freshbytelabs.com/2018/05/how-to-fix-expected-beginarray-but-was.html。
但是当作者使用我的代码中未声明的变量时,我简直迷失了。因此,复制/粘贴示例无效。也许是因为我很愚蠢,但是不胜感激。
JSON预期响应(已通过邮递员测试):
{
"value": [
{
"id": 1,
"uniqueId": "1b97653d-bafe-461f-b609-72ab6795737f",
"code": "NL",
"description": "something",
"isActive": true,
"dateCreated": "2019-04-12T22:41:28.4966667",
"dateModified": "2019-04-12T22:41:28.4966667",
"dateExpired": "9999-12-31T00:00:00",
"timestamp": "AAAAAAAAB9E=",
"responseUserList": []
}
],
"success": true,
"errorCode": null,
"errorMessage": null
}
这是我的主要爱好
var restLanguageService = Retrofit.Builder()
.baseUrl("https://30cookweb20190412110132.azurewebsites.net/")
.addConverterFactory(GsonConverterFactory.create())
.build()
var service = restLanguageService.create(RequestInterface::class.java)
var call = service.getAllLanguages()
call.enqueue(object: Callback<List<RequestInterface>>
{
override fun onResponse(call: Call<List<RequestInterface>>, response: Response<List<RequestInterface>>)
{
var restLanguages = response.body().toString()
if (!response.isSuccessful)
{
for (RestLanguage in restLanguages)
textView.text = "Code: " + response.code()
return
}
}
override fun onFailure(call: Call<List<RequestInterface>>, t: Throwable)
{
textView.text = t.message
}
})
我的界面:
interface RequestInterface
{
@GET("api/language/getalllangaugesasync")
fun getAllLanguages(): Call<List<RequestInterface>>
}
我的数据类:
data class LanguageResponse(
@SerializedName("errorCode")
@Expose
private val errorCode: Any,
@SerializedName("errorMessage")
@Expose
private val errorMessage: Any,
@SerializedName("success")
@Expose
private val success: Boolean,
@SerializedName("languageValue")
@Expose
private val value: List<Value>
)
这是我打印在textView中的字符串:
“预期为begin_array,但在第1行第2列$处为begin_object”
答案 0 :(得分:1)
您的界面应返回响应,具体取决于响应
interface RequestInterface
{
@GET("api/language/getalllangaugesasync")
fun getAllLanguages(): Call<LanguageResponse>
}
代替
interface RequestInterface
{
@GET("api/language/getalllangaugesasync")
fun getAllLanguages(): Call<List<RequestInterface>>
}
答案 1 :(得分:0)
我已经解决了。 Taranjit Kaur的评估不仅正确,而且我拥有以下代码:
if (!response.isSuccessful)
{
for (RestLanguage in restLanguages)
textView.text = "Code: " + response.code()
return
}
感叹号使我整天都在搜索错误。
谢谢大家。