问题
Android studio showed a warning so with ALT + ENTER the code
val name = data[USERNAME] as String
became
val name = data?.get(USERNAME) as String
but my emulator is still crashing
thoughtsCollectionRef.get()
.addOnSuccessListener { snapshot ->
for(document in snapshot.documents){
val data = document.data
//this is my code after listening to android studio
val name = data?.get(USERNAME) as String
val timestamp = data?.get(TIMESTAMP) as Date
val thoughtTxt = data?.get(THOUGHT_TXT) as String
val numLikes = data?.get(NUM_LIKES) as Long
val numComments = data?.get(NUM_COMMENTS) as Long
val documentId = document.id
//I edited every other variable with the safecall ?.get() and its still crashing
val newThought = Thought(name,timestamp,thoughtTxt,numLikes.toInt(),numComments.toInt(),
documentId)
thoughts.add(newThought)
}
thoughtsAdapter.notifyDataSetChanged()
回答1:
The data?.get(TIMESTAMP) call returns a Firebase Timestamp object. So instead of casting it to Date, you should cast it to com.google.firebase.Timestamp:
// imports
import com.google.firebase.Timestamp
...
// rest of the code
val timestamp = data?.get(TIMESTAMP) as? Timestamp
If you want to end up with a Date object, you can use the Timestamp method toDate():
val date = timestamp?.toDate()
Also note that you should use a safe casting operator as? instead of as in this case:
val name = data?.get(USERNAME) as? String
val timestamp = data?.get(TIMESTAMP) as? Timestamp
val thoughtTxt = data?.get(THOUGHT_TXT) as? String
val numLikes = data?.get(NUM_LIKES) as? Long
val numComments = data?.get(NUM_COMMENTS) as? Long
The data?.get(KEY) may produce a null object, which can't be cast to any type and the operation will result in a crash.
来源:https://stackoverflow.com/questions/57588460/hashmap-is-null-so-i-cant-get-my-data-shown-in-the-emulator-from-firebase-databa