首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Californium CoAP客户端检索观察值

从Californium CoAP客户端检索观察值
EN

Stack Overflow用户
提问于 2017-08-08 23:22:41
回答 1查看 337关注 0票数 0

我正在尝试实现一个基于加利福尼亚的CoAP客户端。我让这个客户端观察一个资源:

代码语言:javascript
复制
public static class CoapCl{

    double val = 0;
    CoapClient client = new CoapClient("coap://localhost/Ultrasonic");
    CoapObserveRelation relation = client.observe(new CoapHandler() {
    @Override public void onLoad(CoapResponse response)
    {
        val = Double.parseDouble(response.getResponseText());
    }

    @Override
    public void onError() {
        System.out.println("Failed");

    }
});
}

我想从另一个类访问值"val“。我该怎么做呢?我尝试从CoapCl类调用一个引用,如下所示,并将值打印出来:

代码语言:javascript
复制
CoapCl client = new CoapCl();
    while(true)
    {
    System.out.println("Testing: " + client.val);
    }   

这将打印我从CoAP客户机获得的所有值,包括更改的值和未更改的值。如果我只想获取更改后的值,该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2017-08-10 18:40:39

好吧,这个问题本身与Californium和CoAP无关。除了CoapHandler是异步的,但这是一个相当困难的问题。尽管如此,我还是建议以某种回调结束:

代码语言:javascript
复制
public class CoapCl {
    private final Consumer<Double> valueChangedAction;
    private final CoapClient client = new CoapClient("coap://localhost/Ultrasonic");

    public CoapCl(Consumer<Double> valueChangedAction) {
        this.valueChangedAction = valueChangedAction;
    }

    public void run() {
        client.observe(new CoapHandler() {
            @Override
            public void onLoad(CoapResponse response) {
                valueChangedAction.accept(
                    Double.parseDouble(
                        response.getResponseText()
                    )
                );
            }

            @Override
            public void onError() {
                System.out.println("Failed");
            }
        });
    }
}

代码语言:javascript
复制
new CoapCl(val -> System.out.println("Testing: " + val)).run();

请记住,您必须以某种方式阻塞主线程,以防止程序立即退出。以前,您已经用无限循环阻止了它。现在,如果您的程序中还没有这样的东西,那么您将不得不使用System.in.read()或Thread.sleep或其他东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45572259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档