在Firebase documentation中,有以下代码示例:
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
}
Android Studio告诉我remoteMessage.getData()
返回java.util.Map
类型。发送端的数据采用Json格式,如果发送的数据为{"a":"b","c":"d"}
,则remoteMessage.getData().toString()
将生成:
{a=b, c=d}
我是Java的新手。即使我知道使用的Json结构,如何访问getData()
中返回的数据?
我试过了:
HashMap<String, String> Data = (HashMap<String,String>)remoteMessage.getData();
但是我得到了以下运行时异常:
android.support.v4.util.Array.Map无法强制转换为java.util.HashMap。
答案 0 :(得分:1)
Android Studio告诉我
remoteMessage.getData()
返回java.util.Map
类型。
确切地说,它会返回Map
。它不返回HashMap
,也不依赖于Map的任何特定实现。地图还有许多其他实现,例如TreeMap
。
你应该只使用这样的地图:
Map<String, String> data = remoteMessage.getData();
答案 1 :(得分:0)
试试这个:
$user = $this->getUser();
$panier = $user->getPanier();
if ($this->get('session')->get('vehicule') != null )
{
$type = $this->get('session')->get('vehicule');
$Type = $em-
>getRepository('EKPlateformeBundle:Type')-
>find($type->getId());
$lignePanier->setType($Type);
}
$lignePanier->setPanier($panier);
$lignePanier->setPiece($piece);
$lignePanier->setPrix($prix);
$panier->addLignePanier($lignePanier);
$panier->setNumArticles($panier->getNumArticles() +
$form->getData()->getQuantite() );
$montant = $panier->getMontant() + $prix ;
$panier->setMontant($montant);
$em->flush();
答案 2 :(得分:0)
如果我们查看RemoteMessage.getData()
的文档,就会发现您正在检索Map<String, String>
。
所以你只需要使用方法Map.get
来获取,让我们看看...... "a"
的价值。
Map<String, String> data = remoteMessage.getData();
String value = data.get("a"); // > "b"
如果您不了解JSON,也可以使用Map.entrySet
方法迭代地图