I have a class: Question
It has id
and content
.
I have a HashMap
with Questions
as keys and asnwers(Strings)
as values.
I try to lookup an answer from my map, using a Question
for key.
However it always gives null value and I don't know why because the map does contains my Question.
Code:
Log.i("info", "map:");
Log.i("info", questionAnswers.toString());
Log.i("info", "================================");
Log.i("info", "question we are looking for:");
Log.i("info", question.toString());
Log.i("info", "================================");
Log.i("info", "anwer is null: " + questionAnswers.get(question));
Log.i("info", "================================");
Iterator it = questionAnswers.entrySet().iterator();
//Iterating the map just to get information for test's sake
while (it.hasNext()) {
Map.Entry<Question, String> entry = (Map.Entry<Question, String>) it.next();
//Question in the map
Question questionInCont = entry.getKey();
//Testing the equals method
if (questionInCont.equals(question)) {
Log.i("info", "================================");
Log.i("info", "question we are looking for is equals to a question in the map");
Log.i("info", questionInCont.getQuestionId() + " == " + question.getQuestionId());
String answer = questionAnswers.get(question);
//Great, equals working but still no answer back, only null
Log.i("info", "anwer is still null: " + answer);
Log.i("info", "================================");
}
}
Log output:
11-21 13:22:13.083: I/info(18350): map:
11-21 13:22:13.083: I/info(18350): {Question{questionId='9', content='What is your name?'}=John, Question{questionId='8', content='How old are you?'}=33}
11-21 13:22:13.083: I/info(18350): ================================
11-21 13:22:13.083: I/info(18350): question we are looking for:
11-21 13:22:13.084: I/info(18350): Question{questionId='8', content='How old are you?'}
11-21 13:22:13.084: I/info(18350): ================================
11-21 13:22:13.084: I/info(18350): anwer is null: null
11-21 13:22:13.084: I/info(18350): ================================
11-21 13:22:13.084: I/info(18350): ================================
11-21 13:22:13.084: I/info(18350): question we are looking for is equals to a question in the map
11-21 13:22:13.084: I/info(18350): 8 == 8
11-21 13:22:13.084: I/info(18350): anwer is still null: null
11-21 13:22:13.084: I/info(18350): ================================
So as you can see:
- My HashMap does contain the question Im looking for.
- It does have an answer (value)
- The questions equals method does returns true when both questions have the same id.
E D I T :
Thanks for the comments, my question class does not have hashCode()
function.
Is it the problem?
Question class:
public class Question implements Serializable {
String questionId;
String content;
public Question(String id, String content) {
this.questionId = id;
this.content = content;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Question) {
Question question = (Question) obj;
return questionId.equals(question.getQuestionId());
}
return false;
}
}
Sow why why I got null as the answer?