Kotlin / Parse: com.parse.ParseObject не может быть приведен к - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь выполнить запрос Parse, но я получил эту ошибку:

com.parse.ParseObject не может быть приведен к com.mysapp.mys.common.model.Lesson

но он не входит внутрь подписки после возврата запроса. Ответ сервера хорош, потому что у меня есть его журнал в режиме реального времени.

Я считаю, что у меня проблема, когда я получаю ответ и когда я неявно преобразую с помощью лямбды,Но я не знаю, как добиться этого по-другому.

fun getLessons(coach: Boolean, lessonType: LessonType?, date: Date?, position: LatLng, distance: Double): Single<List<Lesson>> {
        val params = hashMapOf<String, Any?>()
        if (lessonType == null){
            params["lessonType"] = ""
        }
        else{

        }
        params["lessonType"] = 12

        params["date"] = date
        params["geoPoint"] = ParseGeoPoint(44.557514, -0.86099)
        params["within"] = 4935.772
        Log.e("params : ", "lessonType: " + params.get("lessonType") + "| date : " + params.get("date").toString()
                + " | geoPoint: " + params.get("geoPoint") + " | within: "+ params.get("within"))
        return ParseObservable.callFunction<List<Lesson>>("getSessions", params).singleOrError()
    }

как я к этому отношусь:

disposables.add(repository.getLessons(false, lesson, dateSelected, position, distance.toDouble())
                .observeOn(Schedulers.io())
                .subscribe({ lessons ->
                    Log.e("LESSONS", lessons.toString())
                    removeCanceledLessonsAndEmit(lessons)
                }, Throwable::printStackTrace)
        )

Я не знаю, как работает Parse, поэтому яскопировали по этому запросу

, который уже существует в проекте:

fun getAverageRating(coachId: String): Single<HashMap<String, Int>> {
        val params = hashMapOf<String, String>()
        params["coachId"] = coachId
        return ParseObservable.callFunction<HashMap<String, Int>>("getAverageRating", params).singleOrError()
    }

как это обрабатывается:

disposables.add(repository.getAverageRating(coachId)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ rating ->
                    if (rating > 0) {
                        ratingBar.visibility = View.VISIBLE
                        ratingBar.rating = rating
                    } else
                        ratingBar.visibility = View.GONE

                }, Throwable::printStackTrace)
        )

Если вам нужны какие-либо подробности, не стесняйтесь спрашивать меня.

1 Ответ

1 голос
/ 11 июня 2019

Следующий метод getSessions возвращает ParseObject вместо возврата объекта типа Lesson. Попробуйте проверить тип и вернуть соответствующую модель из этого.

Изменить getLessons тип возврата на

   ParseObservable.callFunction<List<Any>>("getSessions", params).singleOrError()

и обработать, как это, чтобы проверить тип возвращаемого значения.

disposables.add(repository.getLessons(false, lesson, dateSelected, position, distance.toDouble())
                .observeOn(Schedulers.io())
                .subscribe({ lessons ->
                    Log.e("LESSONS", lessons.toString())
                    //removeCanceledLessonsAndEmit(lessons)
                }, Throwable::printStackTrace)
        )

Чтобы получить уроки в com.mysapp.mys.common.model.Lesson POJO, вы можете выполнить любое из следующих действий

  1. Аннотировать Lessons класс с @ParseClassName("Lesson") Подробности см. В этом ответе

  2. Приведите объект синтаксического анализа к JSON и используйте gson для преобразования в Урок POJO

Наконец, не забудьте внести необходимые изменения в эту строку ParseObservable.callFunction> ("getSessions", params) .singleOrError ()

...