Google Cloud Messaging:Payload值始终为字符串

时间:2015-07-30 14:30:24

标签: java android google-cloud-messaging

我正致力于为我的应用程序集成护目镜云消息。 从服务器,我发送键值对:

'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 expect Integer但值是a   java.lang.String.java.lang.ClassCastException:java.lang.String不能   被强制转换为java.lang.Integer

gcm是否将所有值转换为String?

通过文档,徒劳无功。我做错了吗?

1 个答案:

答案 0 :(得分: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){}
}

现在检索到的所有值都是原始类型。