How to print SSE Event from API in Textview in Android Studio?

29 views Asked by At

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}

0

There are 0 answers