Fala pessoal, beleza?
Estou tentando construir uma lista de Work Records. Mas ao adicionar o workrecord em uma lista ela me da um erro de NullPointerException.
Ao meu ver, todos os campos que eu desejo estão preenchidos.
Estou aprendendo Java ainda, bem básico.
Segue meu codigo:
public List<WorkRecordVo> findWorkRecord(String id) {
Task task = new Task();
task.setId(new ObjectId(id));
List<WorkRecordVo> listworkrecordsVo = new ArrayList<WorkRecordVo>();
List<ALMWorkRecord> listworkRecords = almWorkRecordDAO.findWorkRecordByTask(task);
for (ALMWorkRecord workRecord : listworkRecords) {
WorkRecordVo workrecord = new WorkRecordVo();
SimpleDateFormat formateDate = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
workrecord.setDataSync(formateDate.format(workRecord.getDataSync()));
workrecord.setTimeSpentReal(workRecord.getTimeSpentReal());
workrecord.setIdContributor(workRecord.getIdContributor());
workrecord.setComment(workRecord.getComment());
workrecord.setAvatar("https://miro.medium.com/fit/c/336/336/0*xFDeApkUaLTOeSDb.jpg");
Contributor contributor = contributorDAO.findByIdContributor(workRecord.getIdContributor());
workrecord.setContributorName(contributor.getName());
listworkrecordsVo.add(workrecord);
}
return listworkrecordsVo;
}
Qual a linha que ocorreu o NPE?
listworkrecordsVo.add(workrecord); Ocorre nessa parte, Lucas.
A lista
não deveria receber dados do tipo WorkRecordVo
? No entanto, tu está passando dados do tipo ALMWorkRecord
:
É uma coisa a verificar, embora isso, aparentemente não pareça gerar um NPE, mas sim uma exceção de tipo. Além disso, o retorno do seu método deveria ser List<E>
e não apenas List
. Logo:
public List<WorkRecordVo> findWorkRecord(String id){
}
ou
public List<ALMWorkRecord> findWorkRecord(String id){
}
A ideia era transformar a lista de ALMWorkRecord para uma lista de WorkRecordVo.
Pq eu estou fazendo isso?
Pq quero apenas alguns atributos da ALMWorkRecord, então criei a classe WorkRecordVo.
Não entendi a parte que o retorno deveria ser List e não List.
Se puder me explicar melhor.
Uma lista precisa saber de que ela é lista. Então: List<Tipo>
:
public List<WorkRecordVo> findWorkRecord(String id)
ou
public List<ALMWorkRecord> findWorkRecord(String id)
, dependendo do retorno que tu quer, da mesma forma que tu fez nas declarações de criação das listas.
Ah, entendi.
Ja esta assim List findWorkRecord(String id){}
E meu retorno pra ela e do tipo WorkRecordVo tambem.
listworkrecordsVo é do tipo WorkRecordVo. E é onde eu tenho adicionar o workrecord nela que também é do tipo WorkRecordVo.
Pq não ta adicionando, não sei, ainda não to conseguindo identificar o erro.
Isso:
é igual a isso public List<WorkRecordVo> findWorkRecord(String id)
?
Sim. É igual. public List<WorkRecordVo> findWorkRecord(String id){...}
Como não sei muito bem usar essa plataforma, a primeira parte não foi reconhecida como um codigo
Então, no seu código não está igual:
public List findWorkRecord(String id){
Task task = new Task();
task.setId(new ObjectId(id));
List<WorkRecordVo> listworkrecordsVo = new ArrayList<WorkRecordVo>();
List<ALMWorkRecord> listworkRecords = almWorkRecordDAO.findWorkRecordByTask(task);
for (ALMWorkRecord workRecord : listworkRecords) {
WorkRecordVo workrecord = new WorkRecordVo();
SimpleDateFormat formateDate = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
workrecord.setDataSync(formateDate.format(workRecord.getDataSync()));
workrecord.setTimeSpentReal(workRecord.getTimeSpentReal());
workrecord.setIdContributor(workRecord.getIdContributor());
workrecord.setComment(workRecord.getComment());
workrecord.setAvatar("https://miro.medium.com/fit/c/336/336/0*xFDeApkUaLTOeSDb.jpg");
Contributor contributor = contributorDAO.findByIdContributor(workRecord.getIdContributor());
workrecord.setContributorName(contributor.getName());
listworkrecordsVo.add(workrecord);
}
}
E eu disse que era para ser algo como:
public List<WorkRecordVo> findWorkRecord(String id){
Task task = new Task();
task.setId(new ObjectId(id));
List<WorkRecordVo> listworkrecordsVo = new ArrayList<WorkRecordVo>();
List<ALMWorkRecord> listworkRecords = almWorkRecordDAO.findWorkRecordByTask(task);
for (ALMWorkRecord workRecord : listworkRecords) {
WorkRecordVo workrecord = new WorkRecordVo();
SimpleDateFormat formateDate = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
workrecord.setDataSync(formateDate.format(workRecord.getDataSync()));
workrecord.setTimeSpentReal(workRecord.getTimeSpentReal());
workrecord.setIdContributor(workRecord.getIdContributor());
workrecord.setComment(workRecord.getComment());
workrecord.setAvatar("https://miro.medium.com/fit/c/336/336/0*xFDeApkUaLTOeSDb.jpg");
Contributor contributor = contributorDAO.findByIdContributor(workRecord.getIdContributor());
workrecord.setContributorName(contributor.getName());
listworkrecordsVo.add(workrecord);
}
}
Você testou se o método findWorkRecordByTask(task)
está retornando valores válidos e não null
?
Verdade. Mas foi falha mesmo na hora de digitação aqui.
Encontrei o erro.
Meu banco me retornava dois registros.
Um possuia a data, o outro não. Consequentemente ele retornava Null
1 curtida