Google 云消息传递:负载值始终为字符串
Google Cloud Messaging: Payload value always string
我正在为我的一个应用程序集成 goggle 云消息传递。
从服务器,我发送键值对为:
'not_id' => 1000,
'title' => 'This is a title. title',
'vibrate' => 1,
'sound' => 1
在 android GCMIntentService 中:
protected void onHandleIntent(Intent intent) {
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()) {
int not_id=extras.getInt("not_id");
提取键not_id的值(整数)时,抛出以下异常:
Key not_id expected Integer but value was a
java.lang.String.java.lang.ClassCastException: java.lang.String cannot
be cast to java.lang.Integer
gcm 是否将所有值都转换为字符串?
徒劳地浏览了文档。我做错了什么吗?
我遇到了同样的问题。我发现的解决方法是将我们创建的 json 字符串化,并将整个 json 作为键值对添加到我们发送到 gcm 云服务器的数据对象中 -
通常我们发送什么 -
myData: {
'title' : 'New Notification',
'myAge' : 25
}
json: {
'to': to,
'data': myData
}
这样,数据包中的所有值都将转换为字符串。上面数据中的25转成String.
我的做法 -
json: {
'to': to,
'data': {'myData' : myData}
}
现在 25 仍然是一个整数。
注意 - 在发送之前将 myData JsonObject 字符串化。在 Javascript 我使用 JSON.stringify(myData);
然后在 Android 端我们可以检索整个 json -
@Override
public void onMessageReceived(String from, Bundle data) {
try {
JSONObject myData = new JSONObject(data.getString("myData"));
} catch (JSONException e){}
}
现在所有检索到的值都将是它们的原始类型。
我正在为我的一个应用程序集成 goggle 云消息传递。 从服务器,我发送键值对为:
'not_id' => 1000,
'title' => 'This is a title. title',
'vibrate' => 1,
'sound' => 1
在 android GCMIntentService 中:
protected void onHandleIntent(Intent intent) {
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()) {
int not_id=extras.getInt("not_id");
提取键not_id的值(整数)时,抛出以下异常:
Key not_id expected Integer but value was a java.lang.String.java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
gcm 是否将所有值都转换为字符串?
徒劳地浏览了文档。我做错了什么吗?
我遇到了同样的问题。我发现的解决方法是将我们创建的 json 字符串化,并将整个 json 作为键值对添加到我们发送到 gcm 云服务器的数据对象中 -
通常我们发送什么 -
myData: {
'title' : 'New Notification',
'myAge' : 25
}
json: {
'to': to,
'data': myData
}
这样,数据包中的所有值都将转换为字符串。上面数据中的25转成String.
我的做法 -
json: {
'to': to,
'data': {'myData' : myData}
}
现在 25 仍然是一个整数。
注意 - 在发送之前将 myData JsonObject 字符串化。在 Javascript 我使用 JSON.stringify(myData);
然后在 Android 端我们可以检索整个 json -
@Override
public void onMessageReceived(String from, Bundle data) {
try {
JSONObject myData = new JSONObject(data.getString("myData"));
} catch (JSONException e){}
}
现在所有检索到的值都将是它们的原始类型。