Android Studio Kotlin dataSnapshot.getValue错误

我已经在最近的项目中将java文件转换为kotlin文件,问题是我正在面对与此代码的错误:

val map = dataSnapshot.getValue<Map>(Map::class.java) 

我在“Map :: class”下有一个红线,android studio说:

只有类允许在类文字的左侧

我应该如何处理这个代码? 有没有其他的方式来写呢?

这是一个相对的kotlin代码片段:

 val messageText = messageArea!!.text.toString() if (messageText != "") { val map = HashMap() map.put("message", messageText) map.put("user", UserDetails.username) reference1!!.push().setValue(map) reference2!!.push().setValue(map) messageArea!!.setText("") } } reference1!!.addChildEventListener(object : ChildEventListener { override fun onChildAdded(dataSnapshot: DataSnapshot, s: String) { val map = dataSnapshot.getValue<Map>(Map::class.java) val message = map.get("message").toString() val userName = map.get("user").toString() 

原始的java代码片段:

 String messageText = messageArea.getText().toString(); if(!messageText.equals("")){ Map map = new HashMap(); map.put("message", messageText); map.put("user", UserDetails.username); reference1.push().setValue(map); reference2.push().setValue(map); messageArea.setText(""); } } }); reference1.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Map map = dataSnapshot.getValue(Map.class); String message = map.get("message").toString(); String userName = map.get("user").toString(); 

尝试铸造它。

 val map = dataSnapshot.getValue(Map::class.java) as Map 

你可能想要抑制“Unchecked Cast”的警告,但是没关系。

基于这个问题的答案,您可以选择使用Kotlin的特定function并实现类似这样的function来扩展DataSnapshot。

 inline fun  DataSnapshot.getValue(): T? { return getValue(T::java.class) } 

或者根据Firebase的DataSnapshot 文档 ,您可以像这样获取地图值。

 val map = dataSnapshot.getValue() if (map is Map<*, *>) { val message = map["message"].toString() val userName = map["user"].toString() }