我正在编写一个必须从java RESTful网络服务接收通知的Android应用程序,例如gcm(谷歌云消息传递)。如果有人知道这是怎么做的,请指教我。谢谢!
答案 0 :(得分:0)
Android应用程序无法像服务器那样接收HTTP消息。您可以使用GCM或实现某种为您检索信息的轮询系统。
弱解决方案: 使用警报管理器,您可以每隔10秒轮询服务器,并获取为您存储的任何信息。
更好的解决方案: 使用长轮询,我的意思是你的应用程序,你应该发送HTTP消息并让它等待30秒,如果没有新的数据发送到服务器然后它将返回没有数据,直接返回再次。如果在该30秒期间的任何时刻服务器接收到一些数据,则将其添加到列表中并告知该消息以释放回具有该列表的电话。只有每次都期待相同类型的信息时,这才会真正起作用。
最佳解决方案: 再次,使用长轮询。但是,不是使用新数据将HTTP消息发回电话,而是返回收到的新数据类型的列表,就像您可以告诉它有一条新的短信等待。然后,当手机收到回复时,手机会发现待处理的消息,然后您可以发送一条Get消息并从存储的列表中检索该消息。
希望有所帮助,解释得有点快!
有关构建Java RESTful服务的帮助,请查看以下链接:https://spring.io/guides/gs/rest-service/
我假设您已经了解RESTful服务的工作原理,如果没有,那么该链接应该有所帮助。至于“更好的解决方案”的示例,只需从使用GET调用创建基本服务开始,该服务返回一个字符串,以便您知道它正在工作。当你有了这个时,你只需要一个方法来轮询每x秒返回一个新数据的列表..
/**
* This is the method you poll every x seconds
* @return
*/
public List<Location> eventPoll() {
ArrayList<Location> oldData = new ArrayList<>(m_Location);
// small possibility this could get a new piece of data thats not in 'oldData' and
// which would be cleared. Would be better looping through removing each piece
// individually comparing it to the oldData
m_Location.clear();
return oldData;
}
我不确定您是如何计划将位置数据导入服务的,但为了简单起见,只需将其添加到ArrayList中即可。
/**
* This is the method that stores the new data
* @return
*/
public Location storeNewLocation(Location location) {
m_Location.add(location);
}
**警告,未经测试。字面意思只是现在写在这里**
同样,这一切都是假设您知道如何执行前面的部分(构建服务),如果没有,那么该代码还没有多大帮助。祝你好运!