将值从 okhttp-eventsource BackgroundEventHandler 传递到主线程

问题描述 投票:0回答:1

我正在尝试使用 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。

提前致谢!

java android okhttp server-sent-events
1个回答
0
投票

使用另一个库解决了:https://github.com/AndroidDeveloper98/ServerSentEventsAndroid,它实现了侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.