我正在尝试使用 okhttp-eventsource lib 来处理 Android 应用程序中的服务发送事件,但我不知道如何将从 onMessage() 方法收到的值传递到我的主线程。 这是我的目标:每次将新的 JSON 发布到我的服务器时,我都希望获取它并在我的主线程上处理它。
这就是我的代码的样子,但它不起作用。
BackgroundEventHandler.onMessage()
方法在日志上打印收到的消息,但我在主线程上得到 NetworkOnMainThreadException
,即使 .messages()
方法应该只返回 SSE 消息的可迭代序列。
BackgroundEventHandler.java
...
public void onMessage(String event, MessageEvent messageEvent){
Log.d(TAG, messageEvent.getData().toString());
}
...
MainActivity.java
...
private void newThingCreated() throws MalformedURLException{
BackgroundEventSource bes = new BackgroundEventSource.Builder(tcHandler,
new EventSource.Builder(
ConnectStrategy.http(explorer.createQueryUrl("/events/thing_created"))
.connectTimeout(10, TimeUnit.SECONDS)
// connectTimeout and other HTTP options are now set through
// HttpConnectStrategy
)
)
.threadPriority(Thread.MAX_PRIORITY)
// threadPriority, and other options related to worker threads,
// are now properties of BackgroundEventSource
.build();
bes.start();
bes.getEventSource().messages().forEach(new Consumer<MessageEvent>() {
@Override
public void accept(MessageEvent messageEvent) {
Log.d(TAG, messageEvent.toString());
}
});
}
...
tcHandler
是我的BackgroundEventHandler。
提前致谢!
使用另一个库解决了:https://github.com/AndroidDeveloper98/ServerSentEventsAndroid,它实现了侦听器。