Retrieve info from JSON bundle

2.2k views Asked by At

While receiving a notification I am receiving some data mentioned below

Bundle[{google.sent_time=1233212221545, msg={"message":"You received a chat message","type":"Match Maker","request_id":"501"}, chat={"owner":0,"request_id":"501"}, from=148566781839, google.message_id=0:148354545211779676%c3fc9c6ff9fd7ecd, android.support.content.wakelockid=3, collapse_key=do_not_collapse}]

From this I want to retrieve

  1. message
  2. Request_id
  3. Owner
  4. type

I am trying to retrieve like this

String mes1 = extras.getString("chat");

I am getting these values

{"owner":0,"request_id":"501"}

Example: from the above I want to get owner and request id how to retrieve these values.

This is my code :

public class GCMIntentService extends IntentService {
    public static final int NOTIFICATION_ID = 1;
    private static final String TAG = "GcmIntentService";
    UserLocalStore userLocalStore;
    private NotificationManager mNotificationManager;

    public GCMIntentService() {
        super("GcmIntentService");
    }

    Intent notificationIntent;
    String type,token,requestid,notify_message;
    Context context;

    @Override
    protected void onHandleIntent(Intent intent) {

        userLocalStore = new UserLocalStore(this);
        Bundle extras = intent.getExtras();

        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

        // The getMessageType() intent parameter must be the intent you received
        // in your BroadcastReceiver.
        String messageType = gcm.getMessageType(intent);

        if (!extras.isEmpty()) {  // has effect of unparcelling Bundle
            /*
             * Filter messages based on message type. Since it is likely that GCM
             * will be extended in the future with new message types, just ignore
             * any message types you're not interested in, or that you don't
             * recognize.
             */

            if (GoogleCloudMessaging.
                    MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                sendNotification("Send error: " + extras.toString());
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_DELETED.equals(messageType)) {
                sendNotification("Deleted messages on server: " +
                        extras.toString());
                // If it's a regular GCM message, do some work.
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_MESSAGE.equals(messageType)) {

                // Post notification of received message.
                Notifyvalue msgvalues = new Notifyvalue();
                Log.i(TAG, "Received: " + extras.toString());

               String mes1 = extras.getString("chat");

                type = extras.getString("type");
                notify_message = extras.getString("msg");
                Global.notification_type = type;

                if (authenticate() == true || userLocalStore.getFBLoggedInUser() == true) {
                    if(Global.notification_type.equals("Match Maker"))
                    {
                        notificationIntent = new Intent(this, Chatactivity.class);
                    }
                    else
                    {
                        notificationIntent = new Intent(this, MainActivity.class);
                    }
                }
                else
                {
                    notificationIntent = new Intent(this, LoginActivity.class);
                }

                switch (type) {
                    case "Rating":
                        Global.notify_message = notify_message;
                        requestid = extras.getString("request_id");
                        Global.Request_id = requestid;

                        break;

                    case "Request":

                        Global.matchtoken = extras.getString("token");
                        requestid = extras.getString("request_id");
                        Global.Request_id = requestid;
                        Global.notify_message = notify_message;

                        break;

                    case "Accept":

                        Global.matchtoken = extras.getString("matchtoken");
                        requestid = extras.getString("request_id");
                        Global.Request_id = requestid;
                        Global.notification_type = type;
                        Global.notify_message = notify_message;

                        break;

                    case "Decline":

                        Global.matchtoken = extras.getString("matchtoken");
                        requestid = extras.getString("request_id");
                        Global.Request_id = requestid;
                        Global.notification_type = type;
                        Global.notify_message = notify_message;

                        break;

                    case "Match Maker":

                        //requestid = extras.getString("request_id");
                        //Global.Request_id = requestid;
                        Global.notification_type = type;
                        Global.notify_message = notify_message;
                        break;

                    case "Anonymous Rating":

                        requestid = extras.getString("request_id");
                        Global.Request_id = requestid;
                        Global.notification_type = type;
                        Global.notify_message = notify_message;
                        Global.feedback = extras.getString("feedback");
                        Global.ratestatus = extras.getString("ratestatus");

                        break;
                    default:

                        break;
                }

                Log.i(TAG, "message: " +  Global.notify_message);
                sendNotification(extras.getString("message"));

            }
        }

                 // Release the wake lock provided by the WakefulBroadcastReceiver.
                 GcmBroadcastReceiver.completeWakefulIntent(intent);
    }
3

There are 3 answers

4
bharat7777 On BEST ANSWER

After using that method you have received a JSON value so instead of getting in string you should use JSONObject like below :

JSONObject object = new JSONObject(extras.getString("chat"));
String str_owner = object.getString("owner");
String str_request_id = object.getString("request_id");

I hope you understand about JSON concept.

0
Alvaro On

This is your chat Object:

    public class Chat {

@SerializedName("owner")
@Expose
private Integer owner;
@SerializedName("request_id")
@Expose
private String requestId;

public Integer getOwner() {
return owner;
}

public void setOwner(Integer owner) {
this.owner = owner;
}

public String getRequestId() {
return requestId;
}

public void setRequestId(String requestId) {
this.requestId = requestId;
}

}

Then, you just have to call

Chat chat = Gson().fromJson(s, Chat.class);

where s is your string "chat" : ""owner":0,"request_id":"501""

0
Praveen On

You can create hashmap from the json string using Gson library

private void testing(){
    String s = "{\"owner\":0,\"request_id\":\"501\"}";
    Gson gson = new Gson();
    HashMap<String, String> map = (HashMap<String, String>) gson.fromJson(s, HashMap.class);
    System.out.println("testing values::"+map);
}