Kotlin Клиент Apollo: не удалось проанализировать HTTP-ответ для запроса списка - PullRequest
0 голосов
/ 18 января 2020

Я работаю над проектом Kotlin Android. В моем проекте я использую GraphQL API с помощью клиента Apollo. Я получаю список с сервера. Но размер списка всегда равен нулю в ответном обратном вызове.

У меня есть файл ListEventsQuery.graphql со следующим определением

query listEvents($isUpcoming:Boolean, $isPresent:Boolean, $isPast:Boolean, $count: Int!, $page: Int){
  listEvents(
    filter:{
      is_upcomming: $isUpcoming,
      is_past :$isPast,
      is_present: $isPresent
    },
    count: $count, page: $page) {
    paginatorInfo {
      count
      currentPage
      firstItem
      hasMorePages
      lastItem
      lastPage
      perPage
      total
    }
    data {
      id
      name
      cover
      description
      start_at
      finish_at
      is_ready
      is_public
      code
      password
      creator {
        id
        name
        email
        avatar
      }
      address {
        id
        organisation_name
        address_line_1
        address_line_2
        address_line_3
        town
        postcode
        latitude
        longitude
        country {
          id
          name
          iso2
        }
      }
      created_at
      updated_at
      areas {
        id
        name
        scenes {
          id
          name
        }
      }
    }
  }
}

У меня также есть класс EventService со следующим определением

class EventService: ApiService(), IEventService
{
    override fun getEvents(eventType: Int, numberOfRecords: Int, page: Int) {
        var queryBuilder: ListEventsQuery.Builder = ListEventsQuery.builder().page(page).count(numberOfRecords)

        getApolloClient(ApplicationController.instance.getLoginAccessToken()).query(queryBuilder.build())
            .enqueue(object : ApolloCall.Callback<ListEventsQuery.Data>() {
                override fun onResponse(response: Response<ListEventsQuery.Data>) {
                    var events: ArrayList<EventModel> = ArrayList<EventModel>()
                    Log.i("RESPONSE_SIZE", "Response size is ${response.data()?.listEvents()?.data()?.size}")

                }

                override fun onFailure(e: ApolloException) {
                    e.printStackTrace()

                }
            })
    }
}

Это определение класса ApiService, которое является родителем класса EventService

open class ApiService
{
    lateinit var client: ApolloClient

    companion object {
        var server: String = "staging"
    }

    private fun getGraphQLServerEndpoint(): String {
        return if (server == "staging") "staging url removed" else "production url removed"
    }

    fun getApolloClient(accessToken: String = ""): ApolloClient {
        return ApolloClient.builder()
            .serverUrl(getGraphQLServerEndpoint())
            .okHttpClient(buildOkHttpClient(accessToken))
            .build()
    }

    private fun buildOkHttpClient(accessToken: String = ""): OkHttpClient {
        if (accessToken.isNullOrEmpty()) {
            return OkHttpClient()
        }

        return OkHttpClient.Builder().addInterceptor { chain ->
            chain.proceed(
                chain.request().newBuilder().addHeader("Authorization", "Bearer $accessToken").build()
            )
        }.build()
    }
}

В методе обратного вызова onResponse класса EventService не вызывается. Вместо этого вызывается метод сбоя. Сообщение об ошибке гласит: «Не удалось проанализировать HTTP-ответ». Я использовал API с помощью GraphQl Playground и Postman, он работает как положено.

...