在Android应用程序的文本视图中显示从AWS IoT云(订阅)接收到的数据

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

我在PublishFragment.java中制作了一个textview。我使用手动定义的数据字符串分别检查了 textview,它显示了该数据。

我正在使用这行代码“mThing.subscribeToIoT(topic, AWSIotMqttQos.QOS0); 在 PublishFragment.java 文件中”调用订阅

当我订阅AWS主题并且有连接时,实际上数据是在CustomizedThing.java文件中的onMessageArrived()函数中接收的。如果我正在调试,有日志显示从云接收到的数据,我已使用 AWS IoT 门户的 MqTT 客户端测试对此进行了验证。

我的问题是,我无法成功将接收到的数据从CustomizedThing.java 文件传输到PublishFragment.java 文件并将其显示在PublishFragment.java 文件中。文本视图未显示任何数据。

请帮助我提供有类似实施的建议/示例项目。我在这里被震撼了很久

我尝试修改PublishFragment.java文件并调试。

我期待在 PublishFragment.java 文件的文本视图中显示数据的建议/替代方法/其他成功实施的示例项目

java android amazon-web-services iot
1个回答
0
投票

最基本的方法是使用接口,在片段中实现它,并将对其的引用传递给消息接收类。为此,请添加到CustomizedThing.java:

public interface MessageConsumable {
    void onMessageArrived(String message);
}

然后在你的片段中实现:

public class PublishFragment extends Fragment implements CustomizedThing.OnMessageReceived {

    @Override
    public void onMessage(String message) {
        //...
    }
}

将监听器注册添加到CustomizedThing:

private OnMessageReceived listener;
public void setOnMessageReceivedListener(OnMessageReceived listener) {
    this.listener = listener;
}

// This code add to your message receiver
if (listener != null) {
    listener.onMessage(message);
}

最后将其注册到您的片段中:

customizedThing.setOnMessageReceivedListener(this);

这是最简单和基本的方法,从架构的角度来看并不是最好的方法。您必须记住在销毁片段时从customizedThing 中删除对片段的引用。我建议使用

private WeakReference<OnMessageReceived> listener;
。请阅读
WeakReferences
了解如何使用它。

您可以在此处找到有关片段之间通信的更多信息。这种方法可以通过 rxJava 或 ViewModel 等框架更好地处理。您还可以考虑数据库 - Room

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