Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用了gcm onMessage(),但数据为null。。。?_Android_Asp.net_Google Cloud Messaging - Fatal编程技术网

Android 调用了gcm onMessage(),但数据为null。。。?

Android 调用了gcm onMessage(),但数据为null。。。?,android,asp.net,google-cloud-messaging,Android,Asp.net,Google Cloud Messaging,我在安卓系统中从事GCM工作,通过asp.net服务器向设备发送数据,代码如下 public void SendCommandToPhone(String sCommand) { String DeviceID = ""; DeviceID = "APA91bF9SSDEp-UPU8UwvctGt5ogfrSw0UdilTWlCujqItHcr-eiPJ31ZDI-IeqTbLr92ZOPF31bXtB1_5gNEPHAq82N4ji0stm4cy9U0Y

我在安卓系统中从事GCM工作,通过asp.net服务器向设备发送数据,代码如下

public void SendCommandToPhone(String sCommand)
    {
        String DeviceID = "";
        DeviceID = "APA91bF9SSDEp-UPU8UwvctGt5ogfrSw0UdilTWlCujqItHcr-eiPJ31ZDI-IeqTbLr92ZOPF31bXtB1_5gNEPHAq82N4ji0stm4cy9U0Yuk0Awhjl9PS02okuc9rRhJobkgOt-ofm5Br0KR-Y";
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
        tRequest.Method = "post";
        //tRequest.ContentType = "application/json";
        tRequest.ContentType = "application/x-www-form-urlencoded";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", "AIzaSyBgCKDhyHnRmmu8jCfmupHVJA8cVkIa-XEZS"));
        String collaspeKey = Guid.NewGuid().ToString("n");
        String postData = string.Format("registration_id={0}&data.message={1}&collapse_key={2}", DeviceID, "YourMessage", collaspeKey);
        Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;
        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        WebResponse tResponse = tRequest.GetResponse();
        dataStream = tResponse.GetResponseStream();
        StreamReader tReader = new StreamReader(dataStream);
        String sResponseFromServer = tReader.ReadToEnd();
        tReader.Close();
        dataStream.Close();
        tResponse.Close();
    }
在应用程序中,消息代码如下所示

@Override
protected void onMessage(Context context, Intent intent) {
String message = intent.getStringExtra("message");
}
当我调用asp.net服务时,它在调试中被正确调用,但是这里消息字符串变为null


有人能帮忙吗,我哪里出错了…

在应用程序中试试这个

@Override
protected void onMessage(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String message = extras.getString("message");
}

应使用以下参数发布您的邮件:

'registration_ids' => DeviceID ,
'data' => array( "notification" => YOUR_JSON_MESSAGE_STRING),
在android端:

Bundle data = intent.getExtras();
data.getString("notification")

可能的原因是,提供给参数的“消息”与服务器中定义的内容不完全相同

您的代码:

@Override
protected void onMessage(Context context, Intent intent) {
     String message = intent.getStringExtra("message");
}
但在服务器中,例如PHP服务器:

$msg = array("mess" => "Hellow World!");
sendNotif($msg);
请参见PHP文件中的mess!=除非您将代码更改为

 @Override  
 protected void onMessage(Context context, Intent intent) {
      String message = intent.getStringExtra("mess");
 }

谢谢你回答Almunef,但我也做了同样的事情,你把多余的东西放在包里,然后是getstring。这是同一件事。但是无论如何,我试过了,但是仍然在message中得到null。你能检查bundle是否为null吗?是的,它为null,这就是onMessage()中的内容已调用但没有数据检索这意味着没有数据随邮件一起发送。asp.net代码中一定有错误。请检查响应以确保邮件是否已从服务器成功发布。如果您可以尝试发布您的请求(代码的结果)这将帮助我们准确地看到正在发生的事情。