gpt4 book ai didi

java - 为什么我的 List 包含整数?

转载 作者:太空狗 更新时间:2023-10-29 13:49:39 26 4
gpt4 key购买 nike

所以,我有以下在本地伪造数据库的方法:

public class TestClassDao implements ClassDao {

// ...

private static List<ClassDto> classes = new ArrayList<>();

@Override
public List<ClassDto> getClassesByIds(List<Long> classIds) {
List<ClassDto> results = new ArrayList<>();

for (ClassDto classInstance : classes) {
if (classIds.contains(classInstance.getId())) {
results.add(classInstance);
}
}

return cloner.deepClone(results);
}

//...

}

我很困惑,因为返回的结果总是空的。我通过 Android Studio 中的调试器,发现包含检查总是返回 false即使已知存在正确的 ID。

通过调试器跟踪 那个,我发现我怀疑是罪魁祸首:根据调试器,List<Long> classIds包含 *Integer* 个对象。是什么赋予了?我不确定如何进一步调试它。

编辑:

这是问题所基于的调试器输出: enter image description here

编辑 2:

下面是测试数据是如何加载到数据存储中的,你可以看到我正确地传递了 Long值(value)观:

下面的方法被一个为学校做类似事情的方法调用,然后通过测试 DAO 中的一个方法持久化。

public static ClassDto getClassTestData(int classId) {
ClassDto classDto = new ClassDto();

switch (classId) {
case 1:
classDto.setId(1L);
classDto.setName("207E - Mrs. Randolph");
classDto.setTeacher(getTeacherTestData());
classDto.setStudents(getStudentsTestData());
return classDto;
case 2:
classDto.setId(2L);
classDto.setName("209W - Mr. Burns");
classDto.setTeacher(getTeacherTestData());
return classDto;
case 3:
classDto.setId(3L);
classDto.setName("249E - Mr. Sorola");
classDto.setTeacher(getTeacherTestData());
return classDto;
default:
return null;
}
}

编辑 3:

这里是持久化/检索学校信息的 DAO。问题发生在插入数据和删除数据之间的某个时间。它与类型 Long 一起使用并出现类型 Int

@Dao
public interface SchoolDao {

@Query("SELECT * FROM schools")
List<SchoolDto> getAllSchools();

@Insert
void insertSchool(SchoolDto schoolDto);

}

最佳答案

哇,真是一场噩梦。我找到了罪魁祸首。

我创建了一个 TypeConverterList<Integer>到一个字符串(然后返回),这样它就可以存储在数据库中的单个列中,而无需修改现有的 DTO。但是,当我切换到使用 Long 时类型作为 ID,我未能在转换器中转换下面的单个通用参数;仔细看下面的代码:

public class IdsListConverter {

@TypeConverter
public List<Long> idsFromString(String value) {
Gson gson = new Gson();
if (value == null || value.isEmpty()) {
return null;
} else {
Type resultType = new TypeToken<List<Integer>>(){}.getType();
return gson.fromJson(value, resultType);
}
}

@TypeConverter
public String idsToString(List<Long> ids) {
if (ids == null) {
return null;
} else {
Gson gson = new Gson();
return gson.toJson(ids);
}
}

}

关于java - 为什么我的 List<Long> 包含整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49822297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com