亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回列表包含整數而不是預期類型,使用房間實體

返回列表包含整數而不是預期類型,使用房間實體

暮色呼如 2023-04-26 14:23:21
在使用 Room 時,我在遍歷應該包含預期類型對象的列表的代碼中遇到了 ClassCastException。請參閱所附代碼中的“FIXME”注釋。我試過使用PersonandPersonEntity而不是? extends Person,但結果沒有變化。基于 Room 示例,我使用存儲庫作為 DAO 和 ViewModel 之間的中介。一個單獨的線程用于插入組信息和成員。來自異常的堆棧跟蹤:E/AndroidRuntime:致命異常:AsyncTask #1 進程:myproject,PID:7323 java.lang.RuntimeException:在 java.os.AsyncTask$3.done(AsyncTask.java:318) 處執行 doInBackground() 時發生錯誤。 util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 在 java.util.concurrent.FutureTask.setException(FutureTask.java:223) 在 java.util.concurrent.FutureTask.run(FutureTask.java:242) 在 android .os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 607)在 java.lang.Thread.run(Thread.java:761)引起:java.lang.ClassCastException:java.lang。整數無法在 myproject.persist.Repository$insertGroupTask.doInBackground(Repository.java:609) 在 myproject.persist.Repository$insertGroupTask.doInBackground(Repository.java:583) 在 android.os.AsyncTask $2.call(AsyncTask.java:304) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237)此類在存儲庫類中private static class insertGroupTask extends AsyncTask<GroupEntity, Void, Void>{    private GroupDAO mAsyncTaskDao;    insertGroupTask(GroupDAO dao) {        mAsyncTaskDao = dao;    }    @Override    protected Void doInBackground (final GroupEntity... params)    {        mAsyncTaskDao.insert(params[0]);        // Add group members.        List<? extends Person> members = params[0].getMembers();        if (members == null || members.size() == 0)            return null;        // FIXME: A ClassCastException occurs (Integer instead of Person).        for (Person p : members) // FIXME: How can members be a list containing Integer objects? See getMembers() in GroupEntity        {            mAsyncTaskDao.addGroupMember(params[0].getId(), p.getId());        }        return null;    }}
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

我的錯。我發現 setter 方法 setMembers(List members) 實際上是在一個用例中獲取成員 ID(整數)列表,其中列表是從 Map 中檢索的。我對泛型中類型擦除的新理解是,即使類型在泛型中定義用于編譯,它在運行時也被視為“對象”。因此,List 本身的任何轉換都不會失敗。第一個類型檢查是在訪問列表中的項目時(在本例中,它在創建后相對較長)。



查看完整回答
反對 回復 2023-04-26
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號