2016-12-08 43 views
-1

我正在實施Firebase推送通知。我正在使用remoteMessage.getData()獲得推送通知。我在for循環中使用Map.Entry來獲取數據。如圖所示,我將鍵和值對取爲: key:body,value:{JSON Object};鍵:標題,值:Placebid。 我想要的是獲得與字符串「標題」的關鍵,並檢查它的「Placebid」,如果是的話,然後得到具有JSON的關鍵「身體」的值。如何在循環內做到這一點?我試過但沒有獲得JSON的價值。檢查for循環中的Map.Entry中的字符串

//onMessageReceived 
if(remoteMessage.getData().size() > 0){ 
      try { 
       System.out.println("sammy_getData "+remoteMessage.getData()); 
       for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) { 
        String key = entry.getKey(); 
        String value = entry.getValue(); 
        Log.d("sammy_ ", "key: " + key + "\n value: " + value); 
        System.out.println("sammy_key: "+key+"\n value: "+value); 
        if(key.contains("title") && value.contains("Placebid")){ 
         JSONObject obj = new JSONObject(value); 
         String jobid = obj.getString("job_id"); 
         String username = obj.getString("username"); 
         String msg = "bided on your job."; 
         String msgbody = username + " " + msg; 
         sendnotificationbid(jobid,msgbody); 
        } 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
//Push notification format 

{ 
    body={ 
    "image": "<Image link>", 
    "job_id": "1349", 
    "id": 121, 
    "message": "New Message Received", 
    "type": "Placebid", 
    "username": "User1234" 
    }, 
    title=Placebid 
} 
+0

'如果(... value.contains( 「Placebid」)){JSONObject的OBJ =新的JSONObject(值);}'它不會使SENS ......因爲值= Placebid – Selvin

+1

爲什麼你需要for循環如果你知道你的密鑰是「title」?直接使用地圖上的鍵獲取值,並檢查它是否等於「Placebid」。 –

+0

你能告訴我如何爲此做一個小例子嗎? @AkshayBhat –

回答

0

由於您在通知title=Placebid格式爲標籤之外,當你調用remoteMessage.getData(),它返回地圖數據是唯一的內部標籤。 如果您的通知格式如下所示(在body內移動title = placebid),它將起作用。

//Push notification format 
{ 
    data:{ 
    "image": "<Image link>", 
    "job_id": "1349", 
    "id": 121, 
    "message": "New Message Received", 
    "type": "Placebid", 
    "username": "User1234" 
    "title":"Placebid" 
    } 
} 

而且沒有必要的for循環,當你知道你正在尋找的關鍵是「冠軍」。直接使用地圖上的鍵獲取值,並檢查它是否等於「Placebid」。

編輯: 通知數據JSON應該像下面的例子JSON和關鍵不是,它是數據

{ 
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
"data" : { 
    "image": "<Image link>", 
    "job_id": "1349", 
    "id": 121, 
    "message": "New Message Received", 
    "type": "Placebid", 
    "username": "User1234" 
    "title":"Placebid" 
} 
} 
+0

是的。格式現在完全如您所說。現在如何解析它? @Akshay –

+0

在'onMessageRecieved(RemoteMessage remoteMessage)'方法中,調用'remoteMessage.getData()'這將返回Map。然後檢查'map.containsKey(「title」)'。 –