我在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 文件的文本视图中显示数据的建议/替代方法/其他成功实施的示例项目
最基本的方法是使用接口,在片段中实现它,并将对其的引用传递给消息接收类。为此,请添加到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。