Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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
Java eventsource android从Flux服务器端点返回空数据字符串_Java_Android_Spring Boot_Android Studio - Fatal编程技术网

Java eventsource android从Flux服务器端点返回空数据字符串

Java eventsource android从Flux服务器端点返回空数据字符串,java,android,spring-boot,android-studio,Java,Android,Spring Boot,Android Studio,我已经成功地在Android中实现了SSE处理 问题 每次我向流发送数据时,都会成功触发onMessage函数。尽管MessageEvent提供的data字段为空 我的实现 Main.java private-SSEHandler-SSEHandler=new-SSEHandler(); 私有事件源事件源; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView

我已经成功地在Android中实现了SSE处理

问题 每次我向流发送数据时,都会成功触发
onMessage
函数。尽管
MessageEvent
提供的
data
字段为空

我的实现 Main.java

private-SSEHandler-SSEHandler=new-SSEHandler();
私有事件源事件源;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startEventSource();
}
私有void startEventSource(){
eventSource=新的eventSource.Builder(“…/Ambicate/assign/receive”)
.eventHandler(sseHandler)
//.headers()
.build();
connect();
}
私有void stopEventSource(){
if(eventSource!=null)
eventSource.close();
sseHandler=null;
}
SSEHandler.java

公共类SSEHandler实现EventSourceHandler{
公共SSEHandler(){}
@凌驾
公共连接无效(){
Log.e(“SSE连接”、“真实”);
}
@凌驾
消息上的公共void(字符串事件、消息事件消息){
Log.e(“SSE消息”,事件);
Log.e(“SSE消息:”,String.valueOf(消息));
}
@凌驾
注释上的公共void(字符串注释){
//仅在打开exposeComments时收到评论
Log.e(“SSE评论”,评论);
}
@凌驾
公共作废登记员(可丢弃的t){
//忽略eventSource.close()上的ssl NPE
Log.e(“SSE错误”、“错误”);
}
@凌驾
关闭后的公共void(布尔值重新连接){
日志e(“SSE关闭”、“重新连接?”+将重新连接);
}
}
服务器端端点
@RequestMapping(method=RequestMethod.GET,value=“/carbum/assign/receive”)
公共流量addReport(){
返回通量。创建(接收器->{
assignProcessor.register(sink::next);
});
}   
无论
Flux
的返回类型是什么
data
字段 在android上总是空的

POST有效负载和MessageEvent对象
有效负载

{
“数据”:“测试”,
“lastEventId”:“测试员”,
“起源”:“我的起源”
}
MessageEvent.java

公共类消息事件{
公共字符串数据;
公共字符串lastEventId;
公共字符串来源;
public MessageEvent(字符串数据、字符串lastEventId、字符串来源){
这个数据=数据;
this.lastEventId=lastEventId;
this.origin=origin;
}
公共消息事件(字符串数据){
这(数据,空,空);
}
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
MessageEvent,它=(MessageEvent)o;
如果(data!=null?!data.equals(that.data):that.data!=null)返回false;
if(lastEventId!=null?!lastEventId.equals(that.lastEventId):that.lastEventId!=null)返回false;
如果(origin!=null?!origin.equals(that.origin):that.origin!=null)返回false;
返回true;
}
@凌驾
公共int hashCode(){
int result=data!=null?data.hashCode():0;
result=31*result+(lastEventId!=null?lastEventId.hashCode():0);
result=31*result+(origin!=null?origin.hashCode():0);
返回结果;
}
@凌驾
公共字符串toString(){
返回“MessageEvent{”+
“数据='”+数据+'\''+
,lastEventId='+lastEventId+'\''+
,origin=''+origin+'\''+
'}';
}
}
已尝试使用:
Flux
数据仍然为空

基于此,我假设它应该以
JSON
格式解析为
data
每个
对象

private void processField(字符串字段,字符串值)

我甚至尝试了纯文本,但似乎也不起作用…

我设法使用另一个java
库来读取对象

这个:

专家

com.squareup.okhttp3
okhttp
4.7.2
格拉德尔
//https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
编译组:“com.squareup.okhttp3”,名称:“okhttp”,版本:“4.7.2”
建筑工人
#https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
'com.squareup.okhttp3:okhttp:jar:4.7.2'
像以前一样实现了EventSource

公共类SimpleEventHandler实现EventHandler{
@凌驾
public void onOpen()引发异常{
System.out.println(“onOpen”);
}
@凌驾
public void onClosed()引发异常{
System.out.println(“onClosed”);
}
@凌驾
public void onMessage(字符串事件、MessageEvent MessageEvent)引发异常{
System.out.println(messageEvent.getData());
}
@凌驾
公共void onComment(字符串注释)引发异常{
系统输出打印项次(“onComment”);
}
@凌驾
公共作废登记员(可丢弃的t){
System.out.println(“onError:+t”);
}
}
主要方法

公共静态void main(字符串[]args)抛出InterruptedException、ExecutionException、UnknownHostException、IOException{
EventHandler EventHandler=新的SimpleEventHandler();
字符串url=String.format(“https://aedproject.herokuapp.com/api/ambulance/assign/receive");
EventSource.Builder=neweventsource.Builder(eventHandler,URI.create(url))
.重新连接时间(持续时间为3000毫秒);
try(EventSource EventSource=builder.build()){
eventSource.start();
时间单位。分钟。睡眠(10);
}捕获(例外e){
}
这一次,
MessageEvent
数据
字段包含了我的整个
对象