Kotlin/Parse:com.parse.ParseObject 不能转换为
Posted
技术标签:
【中文标题】Kotlin/Parse:com.parse.ParseObject 不能转换为【英文标题】:Kotlin/Parse : com.parse.ParseObject cannot be cast to 【发布时间】:2019-06-10 20:38:09 【问题描述】:我正在尝试执行 Parse 请求,但出现此错误:
com.parse.ParseObject 不能转换为 com.mysapp.mys.common.model.Lesson
但是请求返回后它并没有进入订阅内部。 服务器的回答很好,因为我有实时的日志。
我相信当我收到答案以及使用 lambda 隐式转换时我遇到了问题。但我不知道如何以另一种方式实现它。
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)
)
如果您需要任何详细信息,请随时问我。
【问题讨论】:
在订阅中,我需要将ParseObject
转换为ParseObject
的子类。你有这方面的任何信息吗?当我尝试这样做时,我得到了ClassCastExpection
。
【参考方案1】:
下面的方法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 的课程,您可以执行以下任何操作
用@ParseClassName("Lesson")
See this answer for details注释Lessons
类
将解析对象转换为 JSON 并使用 gson 转换为 Lesson POJO
最后,不要忘记对这一行进行必要的更改ParseObservable.callFunction>("getSessions", params).singleOrError()
【讨论】:
是的,现在它输入了subscribe
!但我仍然需要将其转换为List<Lesson>
。我已经尝试了以下不起作用的方法:val list = lessons.filterIsInstance<Lesson>() if (list.size != lessons.size) Log.e("CAST", "CAST FAILED")
casting 在订阅内没有帮助,您需要从getSessions
方法返回课程。您可以在答案中添加该方法,以便我检查。
getSessions在服务端,自动返回ParseObject
但我想知道,为什么在我给我的帖子 (averageRating
) 的示例中,它也返回一个 ParseObject
,但 cast
到 Int
的工作正常?跨度>
经过一番交谈后,我终于明白ParseObject
就像JSON
,所以我可以读取这样的数据:name = parseObject.getString("name")
以上是关于Kotlin/Parse:com.parse.ParseObject 不能转换为的主要内容,如果未能解决你的问题,请参考以下文章