Как я могу расширить свой объект graphql в свой объект Kotlin? - PullRequest
0 голосов
/ 06 апреля 2019

Когда я получаю список объектов Ingredient из AWS Appsync, он возвращается ко мне в виде списка ListIngredientsQuery.Item.

Я бы хотел, чтобы мой объект Ingredient в моем коде Kotlinрасширьте ListIngredientsQuery.Item, чтобы вместо этого я мог получить список ингредиентов с сервера и выполнять функции, относящиеся к моему объекту Ingredient, на членах в нем.

Я использовал: в своем классе данных, чтобырасширить ListIngredientQuery.item, но когда я получаю свой список с сервера, если я пытаюсь получить его как список ингредиентов, я получаю ошибку type mismatch: required:List<Ingredient> found: <ListIngredientsQuery.item!>.

Если бы я был в Java, я бы просто использовалключевое слово «Extends».

моя функция для получения списка:

fun getIngredients() {
    mAWSAppSyncClient!!.query(ListIngredientsQuery.builder().build())
        .responseFetcher(AppSyncResponseFetchers.CACHE_AND_NETWORK)
        .enqueue(ingredientsCallback)
}


private val ingredientsCallback = object:GraphQLCall.Callback<ListIngredientsQuery.Data>() {
    override fun onResponse(response: com.apollographql.apollo.api.Response<ListIngredientsQuery.Data>) {
        var mIngredientsList: List<Ingredient>
        mIngredientsList = response.data()!!.listIngredients()!!.items()!!.toList()
        mIngredientsList!!.forEach {
            Log.d("All Ingredients: ", it.name())}
    }
    override fun onFailure(e: ApolloException) {
        Log.e("Error", e.toString())
    }
}

Ingredient.kt:

import com.amazonaws.amplify.generated.graphql.ListIngredientsQuery

data class Ingredient(val id: String, val name: String, val vegan: type.Vegan = type.Vegan.UNKNOWN, val gf: type.GlutenFree = type.GlutenFree.UNKNOWN ) :
    ListIngredientsQuery.Item("Ingredient", id, name, vegan, gf)

моя схема Graphql:

input CreateIngredientInput {
    name: String!
    vegan: Vegan
    gf: GlutenFree
}

input DeleteIngredientInput {
    id: ID!
}

enum GlutenFree {
    GLUTENFREE
    CONTAINSGLUTEN
    UNKNOWN
}

type Ingredient {
    id: ID!
    name: String!
    vegan: Vegan
    gf: GlutenFree
}

type IngredientConnection {
    items: [Ingredient]
    nextToken: String
}

input ModelBooleanFilterInput {
    ne: Boolean
    eq: Boolean
}

input ModelFloatFilterInput {
    ne: Float
    eq: Float
    le: Float
    lt: Float
    ge: Float
    gt: Float
    contains: Float
    notContains: Float
    between: [Float]
}

input ModelIDFilterInput {
    ne: ID
    eq: ID
    le: ID
    lt: ID
    ge: ID
    gt: ID
    contains: ID
    notContains: ID
    between: [ID]
    beginsWith: ID
}

input ModelIntFilterInput {
    ne: Int
    eq: Int
    le: Int
    lt: Int
    ge: Int
    gt: Int
    contains: Int
    notContains: Int
    between: [Int]
}

enum ModelSortDirection {
    ASC
    DESC
}

input ModelStringFilterInput {
    ne: String
    eq: String
    le: String
    lt: String
    ge: String
    gt: String
    contains: String
    notContains: String
    between: [String]
    beginsWith: String
}

type Mutation {
    createIngredient(input: CreateIngredientInput!): Ingredient
    updateIngredient(input: UpdateIngredientInput!): Ingredient
    deleteIngredient(input: DeleteIngredientInput!): Ingredient
}

type Query {
    getIngredient(id: ID!): Ingredient
    getIngredientByName(name: String!): Ingredient
    listIngredients(filter: TableIngredientFilterInput, limit: Int, nextToken: String): IngredientConnection
}

type Subscription {
    onCreateIngredient(
        id: ID,
        name: String,
        vegan: Vegan,
        gf: GlutenFree
    ): Ingredient
        @aws_subscribe(mutations: ["createIngredient"])
    onUpdateIngredient(
        id: ID,
        name: String,
        vegan: Vegan,
        gf: GlutenFree
    ): Ingredient
        @aws_subscribe(mutations: ["updateIngredient"])
    onDeleteIngredient(
        id: ID,
        name: String,
        vegan: Vegan,
        gf: GlutenFree
    ): Ingredient
        @aws_subscribe(mutations: ["deleteIngredient"])
}

input TableBooleanFilterInput {
    ne: Boolean
    eq: Boolean
}

input TableFloatFilterInput {
    ne: Float
    eq: Float
    le: Float
    lt: Float
    ge: Float
    gt: Float
    contains: Float
    notContains: Float
    between: [Float]
}

input TableIDFilterInput {
    ne: ID
    eq: ID
    le: ID
    lt: ID
    ge: ID
    gt: ID
    contains: ID
    notContains: ID
    between: [ID]
    beginsWith: ID
}

input TableIngredientFilterInput {
    id: TableIDFilterInput
    name: TableStringFilterInput
    vegan: TableBooleanFilterInput
    gf: TableBooleanFilterInput
}

input TableIntFilterInput {
    ne: Int
    eq: Int
    le: Int
    lt: Int
    ge: Int
    gt: Int
    contains: Int
    notContains: Int
    between: [Int]
}

input TableStringFilterInput {
    ne: String
    eq: String
    le: String
    lt: String
    ge: String
    gt: String
    contains: String
    notContains: String
    between: [String]
    beginsWith: String
}

input UpdateIngredientInput {
    id: ID!
    name: String
    vegan: Vegan
    gf: GlutenFree
}

enum Vegan {
    VEGAN
    NONVEGAN
    UNKNOWN
}

1 Ответ

1 голос
/ 06 апреля 2019

Несмотря на то, что в данном коде я не понимаю, почему вы хотите изменить значение с IngredientsQuery.Item на Ingredient Я думаю, что вам не хватает явного приведения в этой строке:

    mIngredientsList = response.data()!!.listIngredients()!!.items()!!.toList()

как это:

    mIngredientsList = response.data()!!.listIngredients()!!.items()!!.toList() as List<Ingredient>

Это должно решить твою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...