2017-02-15 3 views
-2

Ich habe eine mqtt Verbindung im Android Service etabliert. Ich habe alle meine MQtt verwandten Dinge (abonnieren, verbinden, veröffentlichen) im Dienst. Auch ich habe eine Tätigkeit, die 3 Fragmente hat. Jeder Wert zeigt Werte an, die vom MQtt-Server kommen. Ich verwende Broadcast, um den Wert an die Aktivität zu verteilen.MQtt und Android Services

Jetzt möchte ich den neuesten Wert der Variablen vom Server angezeigt werden. Wie kann ich das machen. Das Problem passiert mit mir ist, dass, sobald ich den Wert bekomme es angezeigt wird, aber wenn das Fragment sichtbar ist und der Server den neuen Wert der angezeigten Variablen sendet, kann der Wert nicht aktualisiert werden, bis das Fragment aktualisiert wird.

SO meine Frage ist, wie kann ich den neuesten Wert dynamisch auf dem Bildschirm anzeigen, wie immer wenn der neue Wert kommt, wird es auf den Bildschirm aktualisiert.

Bitte um Hilfe. Danke

+1

Können Sie mir sagen, was Sie senden bis jetzt versucht, wie senden Sie den Wert fragmentieren? wenn die neuen Daten vom Server kommen? – Haroon

+1

Willkommen bei [Stack Overflow] (http://stackoverflow.com/)! Bitte lesen Sie [Frage stellen] (http://stackoverflow.com/help/how-to-ask) und stellen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereit. ! –

+0

@Haroon Ich sende den Wert, wie ich sie im Service empfange. Diese gesendeten Werte werden in Activity über einen Empfänger empfangen. Weitere Zugriffe in Fragmenten durch Aktivität Variablen –

Antwort

0

Verwenden Sie eine LocalBroadcastManager, um die Nachricht im aktuellen Fragment zu erhalten. Ihr Fragment wird etwas so aussehen

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); 
} 

Und können Sie lokale Broadcast von Service

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

Ich habe eine Aktivität in 3 Fragmente unterteilt. Jedes Fragment zeigt einen Wert an, der vom MQTT-Broker abgerufen wurde. Denken Sie nicht, Rundfunkempfänger für jedes Fragment zu machen, ist keine gute Idee. –

+0

Was auch immer Sie gesagt haben, ist 100% korrekt, aber ich habe einen Empfänger in Hauptaktivität von dort Fragmenten Werte holt. Wann immer sie benötigen. Jetzt möchte ich, dass das Fragment die Werte holt, wenn DER SERVER SIE SETZT> damit aktualisierte Werte angezeigt werden können –

Verwandte Themen