2016-12-08 20 views
-1

私はFirebaseプッシュ通知を実装しています。私はremoteMessage.getData()を使用してプッシュ通知を取得しています。 forループでMap.Entryを使用してデータを取得しています。示されているように、キーと値のペアは次のようになります。 key:body、value:{JSON Object};キー:タイトル、値:Placebid。 私が望むのは、文字列 "title"でキーを取得し、 "Placebid"であるかどうかをチェックし、そうであればJSONを持つキー "body"の値を取得します。どのようにループの中でこれを行うには?私は試しましたが、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ループが必要ですあなたのキーが「タイトル」であることを知っていたら?マップからキーを使用して値を直接取得し、それが "Placebid"と等しいかどうかを確認します。 –

+0

これについての小さな例を教えてもらえますか? @AkshayBhat –

答えて

0

通知形式でごtitle=PlacebidはあなたがremoteMessage.getData()を呼び出すときに、タグの外側にあるので、それだけでタグ内にあるデータのマップを返します。 あなたの通知形式が以下のように変更された場合(本文内の移動タイトル= 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 ")'をチェックします。 –

関連する問題