אני כותב אפליקציית אנדרואיד שמתקשרת עם שרת api, האפליקציה שולחת בקשות עם פרמטרים, והשרת מגיב בjson וכאן משום מה הRetrofit נתקע ומחזיר שגיאה Expected a string but was BEGIN_OBJECT $ at line 1 column 2 path
מחיפוש בגוגל מצאתי שזה בעיה מוכרת, אבל לא הצלחתי ליישם אף אחד מהפתרונות שהובאו כאן וכאן,
הגדרתי בקובץ ApiService.kt
package com.abaye.myapplication
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Url
interface ApiService {
@GET
fun fetchData(@Url url: String): Call<String>
}
ובקובץ RetrofitClient.kt
package com.abaye.myapplication
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://api.abaye.co/"
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
וככה אני משתמש
private fun login(value1: String, callback: LoginCallback) {
val url = "pter?value1=$value1"
val call = RetrofitClient.apiService.fetchData(url)
call.enqueue(object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {
if (response.isSuccessful) {
val result = response.body()
showTextBubble(result.toString())
} else {
callback.onFailure("Error: ${response.code()}")
}
}
override fun onFailure(call: Call<String>, t: Throwable) {
showTextBubble("Error: ${t.message}")
binding.textView2.setText(t.message.toString())
callback.onFailure("Error: ${t.message}")
}
})
}
והonFailure מופעל וזורק את השגיאה לעיל.
יצויין כי תגובת שרת הAPI תקינה לגמרי, וכן כשחוזר טקסט רגיל זה עובד פיקס.