0

背景:我正在尝试使用消息传递应用程序

问题描述:通常 Codesnipped 2 像魅力一样工作并从服务器加载数据。但是当使用 Codesnipped 1 激活 LocalDatastore 时,错误

java.lang.ClassCastException:com.parse.ParseObject 无法转换为 at.test.activity.Message

出现。Message 是 ParseObject 的子类。

当使用调试器查看发生错误的行时,可以看到移交给 done 函数的列表在第一个位置仅包含一个类型为“Message”的对象,而所有其他元素的类型为“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);
        }
    }
}); `
4

1 回答 1

0

我认为您在开始使用 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);

如果您将完成上述步骤,它将为您工作。

于 2017-07-11T05:58:43.803 回答