2017-02-15 12 views
-2

私はAndroidサービスでmqtt接続を確立しました。私はすべての自分のMqtt関連のもの(購読、接続、公開)をサービス中に持っています。また、私は3つの断片を持っている活動があります。各値は、MQttサーバーからの値を表示します。私は活動に価値を分配するために放送を使用しています。MqttとAndroidサービス

今、サーバーからの変数の最新の値を表示します。どうやってやるの。 私の問題は、値を受け取るとすぐに表示されますが、フラグメントが表示されている間にサーバーが表示された変数の新しい値を送信すると、フラグメントがリフレッシュされない限り値は更新されません。

私の質問は、新しい値が画面に更新されるたびに最新の値を画面に動的に表示する方法です。

親切にお手伝いください。ありがとう

+1

をローカルブロードキャストを送信することができ、あなたはどのように断片化した値を送信している、あなたが今まで試したものを私に伝えることができますか?新しいデータがサーバから来たとき? – Haroon

+1

ようこそ[スタックオーバーフロー](http://stackoverflow.com/)! [質問する方法](http://stackoverflow.com/help/how-to-ask)を読んで、[最小限の完全で検証可能な例]を提供してください(http://stackoverflow.com/help/mcve) ! –

+0

@ハロン私はサービスでそれらを受け取るように私は値を放送しています。これらのブロードキャストされた値は、レシーバを通じてアクティビティで受信されます。変数 –

答えて

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

私は1つのアクティビティを3つのフラグメントに分割しました。各フラグメントは、MQTTブローカーからフェッチされた値を表示します。あなたは各断片の放送受信機を作るのは良い考えではないと思います。 –

+0

あなたが言ったことは100%正確ですが、そこから主な活動のレシーバを作りました。フラグメントは値を取得します。彼らが必要なときはいつでも。今、私は、フラグメントが更新された値を表示できるように、サーバーがそれらを送信したときに値をフェッチする必要があります。 –

関連する問題