如何在java.util.Map对象中提取数据?

时间:2017-09-19 13:03:39

标签: java firebase-cloud-messaging

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。

3 个答案:

答案 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方法迭代地图