2015-02-09 18 views
0

我遇到了實現Dale Lane MQTT解決方案的問題。MQTT實現問題(Dale Lane示例)

我似乎無法弄清楚如何從我正在使用的MQTT客戶端檢索發佈的消息。

我不確定我是否錯誤地使用了onReceive()方法,但現在我只想記錄廣播的消息。

http://dalelane.co.uk/blog/?p=1599

我已經實現的服務是完全一樣的在這裏列出,我沒有錯誤。

public class MQTTNotifier extends Activity implements OnClickListener { 

    String preferenceBrokerHost, preferenceBrokerTopic; 

    private StatusUpdateReceiver statusUpdateIntentReceiver; 
    private MQTTMessageReceiver messageIntentReceiver; 
    private EditText etBroker, etTopic; 

    Button btnSubscribe, btnStopService; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mqttnotifier); 
    initValues(); 
    // startService(); 
    } 

    private void initValues() { 

    btnSubscribe = (Button) findViewById(R.id.btnSubscribe); 
    btnSubscribe.setOnClickListener(this); 

    btnStopService = (Button) findViewById(R.id.btnStopService); 
    btnStopService.setOnClickListener(this); 



    // if statement to see if sharedpreferences exist, if so reopen recievers 
    /* 
    * statusUpdateIntentReceiver = new StatusUpdateReceiver(); IntentFilter intentSFilter = new 
    * IntentFilter(MQTTService.MQTT_STATUS_INTENT); registerReceiver(statusUpdateIntentReceiver, 
    * intentSFilter); 
    * 
    * messageIntentReceiver = new MQTTMessageReceiver(); IntentFilter intentCFilter = new 
    * IntentFilter(MQTTService.MQTT_MSG_RECEIVED_INTENT); registerReceiver(messageIntentReceiver, 
    * intentCFilter); 
    */ 


    } 

    public class StatusUpdateReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle notificationData = intent.getExtras(); 
     String newStatus = notificationData.getString(MQTTService.MQTT_STATUS_MSG); 


    } 
    } 
    public class MQTTMessageReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle notificationData = intent.getExtras(); 
     String newTopic = notificationData.getString(MQTTService.MQTT_MSG_RECEIVED_TOPIC); 
     String newData = notificationData.getString(MQTTService.MQTT_MSG_RECEIVED_MSG); 
     Log.e("NEW TOPIC", newTopic); 
     Log.e("NEW DATA", newData); 


    } 
    } 

    @Override 
    protected void onDestroy() { 
    unregisterReceiver(statusUpdateIntentReceiver); 
    unregisterReceiver(messageIntentReceiver); 

    } 

    private void startService() { 
    Intent svc = new Intent(this, MQTTService.class); 
    startService(svc); 
    } 

    private void stopService() { 
    Intent svc = new Intent(this, MQTTService.class); 
    stopService(svc); 
    } 

    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if (hasFocus) { 
     NotificationManager mNotificationManager = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     mNotificationManager.cancel(MQTTService.MQTT_NOTIFICATION_UPDATE); 
    } 
    } 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
     case R.id.btnSubscribe: 

     etBroker = (EditText) findViewById(R.id.etBroker); 
     etTopic = (EditText) findViewById(R.id.etTopic); 
     preferenceBrokerHost = etBroker.getText().toString().trim(); 
     preferenceBrokerTopic = etBroker.getText().toString().trim(); 

     createSharedPreferences(preferenceBrokerHost, preferenceBrokerTopic); 
     establishRecievers(); 
     startService(); 
     break; 

     case R.id.btnStopService: 
     stopService(); 
    } 

    } 

    private void createSharedPreferences(String broker, String topic) { 
    SharedPreferences settings = getSharedPreferences(MQTTService.APP_ID, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("broker", broker); 
    editor.putString("topic", topic); 
    editor.commit(); 

    } 

    private void establishRecievers() { 
    statusUpdateIntentReceiver = new StatusUpdateReceiver(); 
    IntentFilter intentSFilter = new IntentFilter(MQTTService.MQTT_STATUS_INTENT); 
    registerReceiver(statusUpdateIntentReceiver, intentSFilter); 


    messageIntentReceiver = new MQTTMessageReceiver(); 
    IntentFilter intentCFilter = new IntentFilter(MQTTService.MQTT_MSG_RECEIVED_INTENT); 
    registerReceiver(messageIntentReceiver, intentCFilter); 
    } 
} 
+0

我不認爲你曾經註冊過你的接收器。 – DeeV 2015-02-09 20:43:42

+0

怎麼樣?我相信這就是我在establishRecievers()中做的事情?但我可能是錯的。 – 2015-02-09 21:17:24

+0

不,我現在看到你正在使用onClick。我不確定你爲什麼沒有收到消息。你確定你的經紀人得到他們嗎?此應用可以發佈消息嗎? – DeeV 2015-02-09 21:54:46

回答

0

事實證明,這個問題是關於這條線的簡單錯誤。

preferenceBrokerTopic = etBroker.getText().toString().trim(); 

我改正了這個問題,現在它糾正了,因爲它沒有訂閱正確的話題。

preferenceBrokerTopic = etTopic.getText().toString().trim();