I am trying to implement API whose Content type is "text/event-stream" using retrofit library. I am able to successfully implement it but i don't know how to manage the events and print it in text view. Below is the code of my implementation:
@GET("apiUrl")@Streaming fun addMessage(@Query("token") token: String, @Query("question") question: String, @Query("thread_id") thread_id: String,): Call<ResponseBody>
var call: Call<ResponseBody>? =
RestClient.client?.addMessage(token,question.toString(),threadId.toString())
call?.enqueue(object:Callback<ResponseBody>{
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
if (response.isSuccessful) {
Log.d("ADDMESSAGE",""+response.toString())
}else{
val errorBody = response.errorBody()?.string()
try {
val errorResponse = Gson().fromJson(errorBody, app.legaltips.com.model.register.ErrorResponse::class.java)
Toast.makeText(
requireContext(),
errorResponse.errorMessage,
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
// Handle parsing error
}
}
}
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
Toast.makeText(
requireContext(),
"Something went wrong!",
Toast.LENGTH_SHORT
).show()
}
})
Response is like this :
event: update
data: <START_SSE_EVENTS>thread_id: 123; category_id: 456
event: update
data:
event: update
data: 1
event: update
data: Hel
event: update
data: llo
event: update
data: <END_SSE_EVENTS>
I even tried printing the response in log but it is giving the URL as response
Response{protocol=http/1.1, code=200, message=OK, url=https://api?token=token&question=question&thread_id=null}