问题描述
我正致力于为我的应用程序集成护目镜云消息。 从服务器,我发送键值对作为:
'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");
在提取key not_id(这是一个整数)的值时,抛出以下异常:
Key not_id expect Integer但value是java.lang.String.java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer
gcm会将所有值转换为String吗?
通过文档,徒劳无功。 难道我做错了什么?
1楼
我遇到了同样的问题。 我找到的解决方法是对我们创建的json进行字符串化,并将整个json添加为我们发送到gcm云服务器的数据对象中的键值对 -
通常我们发送的东西 -
myData: {
'title' : 'New Notification',
'myAge' : 25
}
json: {
'to': to,
'data': myData
}
这样,数据包中的所有值都将转换为String。 在上面的数据中,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){}
}
现在,检索到的所有值都将采用其原始类型。