First Json Array没有在Kotlin中使用Reform和Kotlin Coroutine进行解析



我使用ZipPostal代码Api获得Village,City,Dist。改造网络库和kotlin协同程序。我使用了https://api.postalpincode.in/pincode/{PINCODE}。Give Error是";com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_OBJECT,但在第1行第2列路径$"处为BEGIN_ARRAY;

[{"Message":"Number of pincode(s) found:3","Status":"Success","PostOffice":
[{"Name":"Baroda House","Description":null,"BranchType":"Sub Post Office","DeliveryStatus":"Non-Delivery","Circle":"Delhi","District":"Central Delhi","Division":"New Delhi Central","Region":"Delhi","Block":"New Delhi","State":"Delhi","Country":"India","Pincode":"110001"},
{"Name":"Bengali Market","Description":null,"BranchType":"Sub Post Office","DeliveryStatus":"Non-Delivery","Circle":"Delhi","District":"Central Delhi","Division":"New Delhi Central","Region":"Delhi","Block":"New Delhi","State":"Delhi","Country":"India","Pincode":"110001"},
{"Name":"Supreme Court","Description":null,"BranchType":"Sub Post Office","DeliveryStatus":"Non-Delivery","Circle":"Delhi","District":"Central Delhi","Division":"New Delhi Central","Region":"Delhi","Block":"New Delhi","State":"Delhi","Country":"India","Pincode":"110001"}]}]

上面,Json数据有第一个落在Json对象之后的Json数组,所以,它给出上面的错误。

Pincode.kt

data class Pincode(
@SerializedName("Message")
val Message : String,
@SerializedName("Status")
val Status : String,
@SerializedName("PostOffice")
val PostOffice : List<PostOffice>
)

邮局.kt

data class PostOffice(
@SerializedName("Name")
val Name : String,
@SerializedName("BranchType")
val BranchType : String,
@SerializedName("DeliveryStatus")
val DeliveryStatus : String,
@SerializedName("Circle")
val Circle : String,
@SerializedName("District")
val District : String,
@SerializedName("Division")
val Division : String,
@SerializedName("Region")
val Region : String,
@SerializedName("Block")
val Block : String,
@SerializedName("State")
val State : String,
@SerializedName("Country")
val Country : String,
@SerializedName("Pincode")
val Pincode : String,
)

ApiClient.kt

object ApiClient {
val apiInterfce: ApiInterface = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(getClient())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiInterface::class.java)
}
fun getClient() : OkHttpClient {
val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.MINUTES)
.readTimeout(10, TimeUnit.MINUTES)
.build()
return client
}

ApiInterface.kt

interface ApiInterface {

@GET("pincode/{PINCODE}")
suspend fun pinCode(@Path("PINCODE") pinCode: String?): Response<Pincode>
}

主要活动.kt

private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPinCodeVerificationBinding.inflate(layoutInflater)
setContentView(binding.root)
val etPinCode = binding.etPinCode.text.toString()
GlobalScope.launch (Dispatchers.IO){
val api  = ApiClient.apiInterfce.pinCode(etPinCode)
if (api.isSuccessful && api.body() != null){
val data = api.body()!!

data.Status.let {
binding.etAddress.setText(it)
}
data.PostOffice.let {
binding.etVillage.setText(it?.component1()?.Name)
binding.etTaluka.setText(it?.component2()?.Block)
binding.etDist.setText(it?.component3()?.District)
binding.etState.setText(it?.component4()?.State)
binding.etCountry.setText(it?.component5()?.Country)
}
}
}
}

当应用程序在崩溃后运行时,给出此错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_OBJECT,但在第1行第2列路径$处为BEGIN_ARRAY。如何对其进行错误修复和pincode验证此Api以及显示数据后的村庄、城市、Dist和州。任何其他可用的邮政编码api都建议我。

这是因为在您的响应中有Array,当您收到该响应时,您可以使用对象访问该响应。

当你们收到回复时,你们必须做下面的一行。

interface ApiInterface {

@GET("pincode/{PINCODE}")
suspend fun pinCode(@Path("PINCODE") pinCode: String?): Response<List<Pincode>>
}

最新更新