从 JSON 包中检索信息
Retrieve info from JSON bundle
在收到通知时,我收到了下面提到的一些数据
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}]
我想从中检索
message
Request_id
Owner
type
我正在尝试这样检索
String mes1 = extras.getString("chat");
我正在获取这些值
{"owner":0,"request_id":"501"}
示例:从上面我想获取所有者并请求 ID 如何检索这些值。
这是我的代码:
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);
}
使用该方法后,您收到了一个 JSON 值,因此您不应使用字符串,而应使用 JSONObject 如下所示:
JSONObject object = new JSONObject(extras.getString("chat"));
String str_owner = object.getString("owner");
String str_request_id = object.getString("request_id");
希望你能理解JSON的概念。
这是您的聊天对象:
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;
}
}
然后,您只需调用
Chat chat = Gson().fromJson(s, Chat.class);
其中 s 是您的字符串 "chat" : ""owner":0,"request_id":"501""
您可以使用 Gson 库从 json 字符串创建散列映射
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);
}
在收到通知时,我收到了下面提到的一些数据
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}]
我想从中检索
message
Request_id
Owner
type
我正在尝试这样检索
String mes1 = extras.getString("chat");
我正在获取这些值
{"owner":0,"request_id":"501"}
示例:从上面我想获取所有者并请求 ID 如何检索这些值。
这是我的代码:
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);
}
使用该方法后,您收到了一个 JSON 值,因此您不应使用字符串,而应使用 JSONObject 如下所示:
JSONObject object = new JSONObject(extras.getString("chat"));
String str_owner = object.getString("owner");
String str_request_id = object.getString("request_id");
希望你能理解JSON的概念。
这是您的聊天对象:
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;
}
}
然后,您只需调用
Chat chat = Gson().fromJson(s, Chat.class);
其中 s 是您的字符串 "chat" : ""owner":0,"request_id":"501""
您可以使用 Gson 库从 json 字符串创建散列映射
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);
}