#android #api #kotlin #retrofit #retrofit2
Вопрос:
Я получаю эту ошибку ** Ожидаемый объект BEGIN_OBJECT, но был СТРОКОЙ в строке 1, столбец 1, путь $**
градации ниже, которые я использовал для модернизации
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'
Класс модернизации
class RetrofitClient private constructor() {
val myApi: Api
companion object {
@get:Synchronized
var instance: RetrofitClient? = null
get() {
if (field == null) {
field = RetrofitClient()
}
return field
}
private set
}
init {
val gson = GsonBuilder()
.setLenient()
.create()
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client : OkHttpClient = OkHttpClient.Builder().addInterceptor(interceptor).build()
val retrofit: Retrofit = Retrofit.Builder().baseUrl("http://ctyf.co.in/api/")
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
myApi = retrofit.create(Api::class.java)
}
}
Интерфейс Api
public interface Api {
@Headers("Content-Type: application/json")
@GET("companyvehiclelatestinfo?token=F934A0C439/")
fun getLatLngs(): Call<ResponseLoc?>?
}
класс данных
data class ResponseLoc(
val Vehicle: List<Vehicle>
)
модель данных
data class Vehicle(
val Angle: String,
val Date: String,
val Ignition: String,
val Imei: String,
val Lat: String,
val Location: String,
val Long: String,
val Speed: String,
val Tempr: String,
val VehicleNo: String
)
наконец-то звоню сюда
private fun getLatLngs() {
val call: Call<ResponseLoc?>? = RetrofitClient.instance!!.myApi.getLatLngs()
call!!.enqueue(object : Callback<ResponseLoc?> {
override fun onResponse(call: Call<ResponseLoc?>, response: Response<ResponseLoc?>) {
val responseLoc: List<ResponseLoc> = response.body() as List<ResponseLoc>
//Creating an String array for the ListView
val data = arrayOfNulls<String>(responseLoc.size)
for (i in responseLoc.indices) {
data[i] = responseLoc[i].Vehicle.toString()
Log.d("apiii", data[i].toString())
}
}
override fun onFailure(call: Call<ResponseLoc?>, t: Throwable) {
Log.d("apii", t.message.toString())
}
})
}
Значения JSON
{"Vehicle":[{"VehicleNo":"Test","Imei":"354019","Location":"Tamil Nadu-India","Date":"2021-03-17 19:27:12.000","Tempr":"0","Ignition":"","Lat":"13.11","Long":"80.282","Speed":"0","Angle":"0"}]}
Я перепробовал много стеков, но ни один из них не помог
Есть ли какие-либо другие доступные способы, кроме модернизации ???
кто — нибудь, пожалуйста, помогите мне получить результаты api
Я перепробовал много стеков, но ни один из них не помог
Есть ли какие-либо другие доступные способы, кроме модернизации ???
кто — нибудь, пожалуйста, помогите мне получить результаты api
Комментарии:
1. одной из переменных, которые вы определили в своем классе данных, является строка, но она ожидает JSONObject
2. В вашем json есть проблема. Справа: {«Транспортное средство»:[{«Транспортное средство»:»Тест»,»Imei»:»354019″,»Местоположение»:»Тамилнад-Индия»,»Дата»:»2021-03-17 19:27:12.000″,»Темп»:»0″,»Зажигание»:»»,»Широта»:»13.11″,»Длина»:»80.282″,»Скорость»:»0″,»Угол»:»0″}]}
3. @iamanbansal Tje JSON имеет правильные значения, но я пропустил значения в json, теперь я исправил, помогите мне получить результаты
4. можете ли вы поделиться json, который вы ожидаете от сервера?
5. Я уже добавил