У меня возникла проблема с получением данных из API. Я получил ответ об ошибке с телом, содержит null, когда я проверяю с Log, и я получил сообщение, подобное этому.
E/allCustomer: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $
это результат API в POSTMAN введите описание изображения здесь
это мой код для модели данных
data class BaseResponseList (
@SerializedName("status")
@Expose
var status: Boolean,
@SerializedName("data")
@Expose
var data: Array<Customer>
)
это мой код для класса Customer
ata class Customer (
@SerializedName("id_pelanggan")
@Expose
var idPelanggan: String,
@SerializedName("nama_pelanggan")
@Expose
var namaPelanggan: String,
@SerializedName("alamat")
@Expose
var alamat: String,
@SerializedName("tarif")
@Expose
var tarif: String,
@SerializedName("daya")
@Expose
var daya: String,
@SerializedName("tgl_wo")
@Expose
var tglWo: String,
@SerializedName("ulp")
@Expose
var ulp: String,
@SerializedName("bln_thn_bongkar")
@Expose
var blnThnBongkar: String,
@SerializedName("merk_lama")
@Expose
var merkLama: String,
@SerializedName("no_lama")
@Expose
var noLama: String,
@SerializedName("type_lama")
@Expose
var typeLama: String,
@SerializedName("arus_lama")
@Expose
var arusLama: String,
@SerializedName("bln_thn_pasang")
@Expose
var blnThnPasang: String,
@SerializedName("merk_baru")
@Expose
var merkBaru: String,
@SerializedName("no_baru")
@Expose
var noBaru: String,
@SerializedName("type_baru")
@Expose
var typeBaru: String,
@SerializedName("arus_baru")
@Expose
var arusBaru: String,
@SerializedName("kode_ket")
@Expose
var kodeKet: String,
@SerializedName("foto")
@Expose
var foto: String,
@SerializedName("ttk_koordinat_x")
@Expose
var ttkKoordinatX: String,
@SerializedName("ttk_koordinat_y")
@Expose
var ttkKoordinatY: String,
@SerializedName("id_user")
@Expose
var idUser: String?,
@SerializedName("id_region")
@Expose
var idRegion: String
)
это мой код для настройки дооснащения2
object Api {
private val BASE_URL: String = BuildConfig.API_SRAPP
private var gson = GsonBuilder().setLenient().create()
private val httpClient = OkHttpClient.Builder()
fun <T>service(java: Class<T>): T{
httpClient.addInterceptor(StethoInterceptor())
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(BASE_URL)
.client(httpClient.build())
.build()
return retrofit.create(java)
}
}
interface CustomerServices {
@GET("customer")
fun getAllCustomer(@Header("Authorization") auth: String): Call<BaseResponseList>
}
this мой код для реализации Retrofit2 для получения данных от API
class CustomerPresenter {
private val apiCustomer = Api.service(CustomerServices::class.java)
fun loadAllCustomer(){
val token = OfflineHelper.getToken().orEmpty()
apiCustomer.getAllCustomer(token)
.enqueue(object : Callback<BaseResponseList>{
override fun onFailure(call: Call<BaseResponseList>, t: Throwable) {
Log.e("allCustomer", "${t.message}")
Log.e("callRequest", "${call.request().method()}")
Log.e("execute", "${call.isExecuted}")
Log.e("body", "${call.request().body()?.contentType()}")
Log.e("stackstrace", "${t.stackTrace}, ${t.printStackTrace()}")
}
override fun onResponse(
call: Call<BaseResponseList>,
response: Response<BaseResponseList>
) {
Log.w("loadedAll", "${response.body()}")
}
})
}
}
, и это все результат из журнала
E/allCustomer: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $
E/callRequest: GET
E/execute: true
E/body: null
W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:39)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
W/System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:225)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:121)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:206)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
W/System.err: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
... 9 more
E/stackstrace: [Ljava.lang.StackTraceElement;@2b067c2, kotlin.Unit