簡體   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