Paho MqttAndroidClient.connect总是失败

前端之家收集整理的这篇文章主要介绍了Paho MqttAndroidClient.connect总是失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将消息从 android服务发布到本地服务器.这是我的代码的一部分,最简单的形式基于 here的片段.
  1. MemoryPersistence memPer;
  2. MqttAndroidClient client;
  3.  
  4. @Override
  5. public IBinder onBind(Intent intent) {
  6. memPer = new MemoryPersistence();
  7. client = new MqttAndroidClient(this,"tcp://192.168.1.42:1883","clientid",memPer);
  8.  
  9. try {
  10. client.connect(null,new IMqttActionListener() {
  11.  
  12. @Override
  13. public void onSuccess(IMqttToken mqttToken) {
  14. Log.i("MQTT","Client connected");
  15. Log.i("MQTT","Topics=" + mqttToken.getTopics());
  16.  
  17. MqttMessage message = new MqttMessage("Hello,I am Android Mqtt Client.".getBytes());
  18. message.setQos(2);
  19. message.setRetained(false);
  20.  
  21. try {
  22. client.publish("messages",message);
  23.  
  24. Log.i("MQTT","Message published");
  25.  
  26. client.disconnect();
  27. Log.i("MQTT","client disconnected");
  28. } catch (MqttPersistenceException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. } catch (MqttException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. }
  35.  
  36.  
  37. }
  38.  
  39. @Override
  40. public void onFailure(IMqttToken arg0,Throwable arg1) {
  41. // TODO Auto-generated method stub
  42. Log.i("MQTT","Client connection Failed: " + arg1.getMessage());
  43. }
  44. });
  45. } catch (MqttException e) {
  46. e.printStackTrace();
  47. }
  48.  
  49. return mBinder;
  50. }

但总是调用onFailure函数,我得到错误

  1. I/MQTT Client connection Failed: cannot start service org.eclipse.paho.android.service.MqttService

显然由库返回,因为’listener!= null’,Line 410.使用调试器,它显示’listener = SensorLoggerService $1 @ 3634′. SensorLoggerService是我的服务.

什么可能出错?非常感谢.

解决方法

对我来说同样的问题,在我的情况下问题是< service>标签位于< application>之外标签.

一开始我有这个:

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.mycompany.myapp" >
  3. ...
  4. <service android:name="org.eclipse.paho.android.service.MqttService">
  5. </service>
  6. ...
  7. <application
  8. android:name="com.mycompany.myapp" ... >
  9. ...
  10. </application>

然后我改为:

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.mycompany.myapp" >
  3. ...
  4. <application
  5. android:name="com.mycompany.myapp" ... >
  6. ...
  7. <service android:name="org.eclipse.paho.android.service.MqttService">
  8. </service>
  9.  
  10. </application>

一切正常!

您还需要添加INTERNET和ACCESS_NETWORK_STATE权限,否则您将无法连接.

HTH

猜你在找的Android相关文章