123
123

Reputation: 25

Why is my response body null, status 200?

I am trying to get response body from this url:http:"//192.168.0.220:8000/records/?account_id=2"

In android studio i get status 200 but body is always null. Can anybody please tell me what I am doing wrong?

Response in postman looks like this:

{
    "result": [
        {
            "id": 1,
            "account_id": 2,
            "title": "ez",
            "datetime": "2021-03-21T00:00:00",
            "description": "ez2",
            "image": null,
            "recording": null
        },
        {
            "id": 2,
            "account_id": 2,
            "title": "ez",
            "datetime": "2021-03-21T00:00:00",
            "description": "ez2",
            "image": null,
            "recording": null
        },
....

Response in android studio:

I/System.out: Response{protocol=http/1.1, code=200, message=OK, url=http://192.168.0.220:8000/records/?account_id=2}
    Item(id=null, account_id=null, title=null, datetime=null, image=null, recording=null)

Interface:

interface Gett {
    @GET("?account_id=2")
    fun getRecord(): Call<Record.Item>
}

Class:

class Record {
    data class Item(
        val id: String,
        val account_id: String,
        val title: String,
        val datetime: String,
        val image: String,
        val recording: String
    )
}

MainActivity:

val retrofit = Retrofit.Builder()
                    .baseUrl("http://192.168.0.220:8000/records/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()


val service = retrofit.create(Gett::class.java)
            val call = service.getRecord()

call.enqueue(object : retrofit2.Callback<Record.Item> {
                override fun onResponse(call: Call<Record.Item>, response: Response<Record.Item>) {
                    if (response.code() == 200) {
                        println(response)
                        println(response.body()!!)
                    }
                }
                override fun onFailure(call: Call<Record.Item>, t: Throwable) {
                    println("fail")
                }
            })

Upvotes: 0

Views: 2530

Answers (1)

OhhhThatVarun
OhhhThatVarun

Reputation: 4320

The issue might be this

interface Gett {
    @GET("?account_id=2")
    fun getRecord(): Call<Record.Item> <----
}

So, change your model

data class Record (
    val result: List<Item>
)

data class Item(
        val id: String,
        val account_id: String,
        val title: String,
        val datetime: String,
        val image: String,
        val recording: String
    )

As I can see your JSON has an array of your Item so change it to.

interface Gett {
    @GET("?account_id=2")
    fun getRecord(): Call<Record>
}

Thanks, @Kunn for pointing out JSONObject.

Upvotes: 2

Related Questions