繁体   English   中英

当激活LocalDatastore并从服务器加载子类消息列表时,解析Android SDK:ClassCastException

[英]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),您需要执行以下操作:

  1. 创建一个从ParseObject类扩展的新类
  2. 通过setter和getter添加您希望该子类具有的属性
  3. 用@ParseClassName(“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM