当前位置: 代码迷 >> java >> Google Cloud Messaging:Payload值始终为字符串
  详细解决方案

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

热度:97   发布时间:2023-07-18 09:00:28.0

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

'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吗?

通过文档,徒劳无功。 难道我做错了什么?

我遇到了同样的问题。 我找到的解决方法是对我们创建的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){}
}

现在,检索到的所有值都将采用其原始类型。

  相关解决方案