[英]Parse Android SDK: ClassCastException when LocalDatastore is activated and List of Subclass Message is loaded from the Server
背景:我正在尝试使用Messaging App
问题说明:通常,Codesnipped 2的工作原理类似于超级按钮,并从服务器加载数据。 但是,当使用Codesnipped 1激活LocalDatastore时,错误
java.lang.ClassCastException:com.parse.ParseObject无法转换为at.test.activity.Message
棱。 消息是ParseObject的子类。
当在发生错误的行中使用Debugger查看时,可以看到移交给完成函数的列表在第一个位置仅包含一个“消息”类型的对象,而所有其他元素的类型为“ ParseObject” “(->屏幕快照: 激活本地数据存储区时的DebuggerOutput )。 没有激活的本地数据存储,此列表的每个元素都是“消息”类型。
我究竟做错了什么? 提前致谢!
代码片段1:
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId("test")
.enableLocalDataStore()
.clientBuilder(builder)
.server("http://someinstallation.com/parse/")
.build());
代码片段2:
ParseQuery query = ParseQuery.getQuery(Message.class);
ArrayList idsToQuery = new ArrayList<>();
idsToQuery.add(getSenderID());
idsToQuery.add(getRecipiantID());
query.whereContainedIn("sender", idsToQuery);
query.whereContainedIn("recipiant", idsToQuery);
query.orderByDescending("createdAt");
query.findInBackground(new FindCallback() {
public void done(List messages, ParseException e) {
if (e == null) {
addMessagesTomList(messages);
}
else {
Log.e("message", "Error Loading Messages" + e);
}
}
}); `
我认为您在开始使用Parse子类之前忘记了做一些步骤,因此为了创建子类(在您的情况下为Message),您需要执行以下操作:
最后,您的子类应如下所示:
import com.parse.ParseClassName;
import com.parse.ParseObject;
@ParseClassName("Message")
public class CheckIn extends ParseObject {
public String getContent() {
return getString("content");
}
public void setContent(String content) {
put("content", content);
}
public String getTitle() {
return getString("title");
}
public void setTitle(String title) {
put("title", title);
}
}
最后,转到您初始化Parse SDK的位置(通常在应用程序文件中)并注册您创建的新子类:
ParseObject.registerSubclass(Message.class);
如果您要执行上述步骤,它将为您工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.