我正在使用“新”GCM(Google Play服务的一部分),它不会为Android和服务器使用jar。 Android使用Google Play apk注册,接收甚至发送消息。在服务器端,我们需要与GCM通信的是对他们的服务器进行POST(如果不使用XMPP)。我已全部设置:我的Android应用程序注册并等待来自GCM的消息。我的服务器可以与GCM通信,我可以将消息发送到我的Android应用程序。
问题:我正在使用一个常见的jar(Android和服务器)与POJO对象,我转换为JSON和从JSON转换。由于从我的服务器POST到GCM使用JSON并在我的Android使用中收到消息(至少我相信它),我认为这会让我的生活更轻松。但是当在Android中从GCM接收消息时,我不知道如何获取消息的有效负载并转换为我的对象。我可以看到那里的信息,但这不是我的对象(有一些信息GCM推进它)。
我的问题是:在Android端,有没有办法按照我发送给GCM服务器的方式获取有效负载信息?或者我应该在没有JSON的情况下解析Android中收到的数据?
我发送的消息(“数据”是有效负载)
{ “registration_ids”:[ “APA91bFdV ...”], “collapse_key的”:NULL, “delay_while_idle”:假 “time_to_live”:2419200, “数据”:{ “类型”:10 “targetVersion”: -1,“message”:“test msg”,“url”:“test url”}}
我在Android的注意事项.getExtras()。toString()
Bundle [{message = test msg,collapse_key = do_not_collapse, targetVersion = -1,from = 483833987130,type = 10,url = test url}]
我很感激你的帮助。谢谢!
答案 0 :(得分:25)
有没有办法在Android端获取有效负载信息,就像我发送给GCM服务器一样?
不要考虑“JSON”,而应该考虑“键/值对”。您的服务器以键/值对的形式发送数据。您的应用会在Intent
的附加内容中将这些数据作为键/值对接收。您知道密钥是什么,因此只需从与这些密钥绑定的附加内容中检索值(例如getStringExtra("message")
,getStringExtra("url")
)。
或者我应该在没有JSON的情况下解析Android中收到的数据吗?
收到的数据不是JSON。
答案 1 :(得分:10)
你必须为json数据添加另一个级别,显然它们不会递归地解析json。 发送:
{...., "data":{"payload":{"id":5,"a":5}}}
然后在代码中:
String json = intent.getExtras().getString("payload");
// json = {"id":5,"a":5}
这可以很容易地转换为POJO,对我来说,如果你已经有了类(或者只想使用对象而不是get ...(“xyz”)
,这种方法会更好