2017-02-15 3 views
-2

У меня есть соединение mqtt, установленное в службе android. У меня есть все мои связанные с Mqtt вещи (подписка, подключение, публикация) на службе. Также у меня есть активность, у которой есть 3 фрагмента. Каждое значение отображает значения, поступающие с сервера MQtt. Я использую широковещательную рассылку, чтобы распределить ценность для этой активности.Услуги Mqtt и Android

Теперь я хочу отобразить последнее значение переменной, поступающей с сервера. Как я могу это сделать. Проблема со мной заключается в том, что, как только я получаю значение, которое он отображает, но если фрагмент виден, а между тем сервер отправляет новое значение отображаемой переменной, тогда значение can not должно обновляться до тех пор, пока не будет обновлен фрагмент.

SO мой вопрос в том, как я могу отображать последнее значение динамически на экране, например, всякий раз, когда появляется новое значение, оно обновляется до экрана.

Просьба помочь. Спасибо

+1

Можете ли вы сказать мне, что вы пробовали до сих пор, как вы посылаете значение фрагмента? когда новые данные поступают с сервера? – Haroon

+1

Добро пожаловать в [Переполнение стека] (http://stackoverflow.com/)! Пожалуйста, прочитайте [Как задать вопрос] (http://stackoverflow.com/help/how-to-ask) и укажите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) ! –

+0

@Haroon Я передаю значение, когда я получаю их на службе. Эти передаваемые значения получаются в Activity через приемник. Дальнейший доступ к фрагментам через активность Переменные –

ответ

0

Используйте LocalBroadcastManager, чтобы получить сообщение в текущем фрагменте. ваш фрагмент будет выглядеть как этот

private final BroadcastReceiver messageReciver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
      String message = intent.getStringExtra(PARAM); 
      updateUI(message); 
    } 
}; 


public void onStart() { 
    super.onStart(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(NEW_MESSAGE); 
    LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this); 
    broadcastManager.registerReceiver(messageReciver, filter); 
} 


public void onStop() { 
    super.onStop(); 
    LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this); 
    broadcastManager.unregisterReceiver(messageReciver); 
} 

И вы можете отправить местное вещание от службы

Intent intent = new Intent(NEW_MESSAGE); 
     intent.putExtra(PARAM, "your new message"); 
    LocalBroadcastManager broadcastManager =  LocalBroadcastManager.getInstance(this); 
broadcastManager.sendBroadcast(intent) 
+0

У меня есть одна деятельность, разделенная на 3 фрагмента. Каждый фрагмент отображает некоторое значение, полученное от брокера MQTT. Разве вы не думаете, что создание широковещательного приемника для каждого фрагмента не будет хорошей идеей. –

+0

Независимо от того, что вы сказали, на 100% правильно, но я сделал ресивер в основной деятельности, там фрагменты извлекают значения. когда ОНИ ТРЕБУЮТ. теперь я хочу, чтобы фрагмент извлекал значения, когда СЕРВЕР СЕНДЕТ ИММ>, чтобы обновленные значения могли отображаться –