1

when I start my application I keep getting this error. I don't know why am I getting this error because my Response class has list in constructor. I saw this link but I did not find an answer for my question. I am using json server for dummy RESTful api.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.social.network, PID: 3448
    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
        at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
        at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
        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:929)
     Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
        at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40) 
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27) 
        at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243) 
        at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153) 
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174) 
        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:929) 
I/Process: Sending signal. PID: 3448 SIG: 9

This is my Api interface:

interface Api {

    companion object {
        const val BASE_URL = "http://be7c232bf30e.ngrok.io "
    }

    @GET("/posts")
    suspend fun searchPhotos(
        @Query("_page") page: Int,
        @Query("_limit") perPage: Int
    ): Response
}

This is response data class:

data class Response(
    val results: List<Post>
)
Antonio
  • 240
  • 3
  • 15

1 Answers1

1

Probably you should either return list of Post or list of Response


interface Api {

    companion object {
        const val BASE_URL = "http://be7c232bf30e.ngrok.io "
    }

    @GET("/posts")
    suspend fun searchPhotos(
        @Query("_page") page: Int,
        @Query("_limit") perPage: Int
    ): List<Post> // or List<Response>
}
Mariusz Brona
  • 1,549
  • 10
  • 12
  • I cannot return list of `Post` or `Response` because I have PagingSource class for handling so I need to access `result`parameter from `Response` class – Antonio Oct 23 '20 at 07:48
  • Can't you just point the response itself for PagingSource? – Mariusz Brona Oct 23 '20 at 07:57
  • @MariuszBrona can you help here --> https://stackoverflow.com/questions/64495233/retrofit-call-inside-an-adapter-in-android – android dev Oct 23 '20 at 09:36