Я пытаюсь использовать клиент MQTT в приложении Android, но не могу заставить его работать.
Мой клиент MQTT - 0.4.0, а мой Android - 4.0.3.
Приложение очень простое: в нем есть EditText и кнопка для публикации текста. Кроме того, у него есть TextView для отображения полученного сообщения.
Каждый раз, когда нажимается кнопка «Опубликовать», отображается сообщение «соединение потеряно», иногда два или три раза, поскольку он пытался подключиться несколько раз, а затем отключился.
Кроме того, без нажатия на кнопку, если я попробуйте опубликовать сообщение в теме «123456789» через другой клиент, ничего не происходит (сообщение «сообщение прибыло» не отображается).
Ставлю права доступа INTERNET и WRITE_EXTERNAL_STORAGE и приложение не закрывается с исключением, просто сообщения не отправляются / не принимаются.
Это MainActivity
package com.example.mqtttest;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String MQTT_DIR = "/mnt/sdcard";
private static final String MQTT_URI = "tcp://m2m.eclipse.org:1883";
private MqttClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
MqttDefaultFilePersistence mdfp = new MqttDefaultFilePersistence(
MQTT_DIR);
client = new MqttClient(MQTT_URI, "1", mdfp);
client.connect();
client.subscribe("123456789");
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable arg0) {
// TODO Auto-generated method stub
System.out.println("Connection lost");
try {
client.connect();
} catch (MqttException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken arg0) {
// TODO Auto-generated method stub
}
@Override
public void messageArrived(String arg0, MqttMessage arg1)
throws Exception {
// TODO Auto-generated method stub
TextView txt = (TextView) findViewById(R.id.txt);
txt.setText(arg1.toString());
}
});
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
MqttMessage msg = new MqttMessage();
msg.setPayload((((EditText) findViewById(R.id.editTxt))
.getText().toString()).getBytes());
client.publish("123456789", msg);
} catch (MqttException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
} catch (MqttException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Новая информация. Если я использую org.eclipse.paho.client.mqttv3.jar, приложение работает нормально.
Проблема только в org.eclipse.paho.client.mqttv3-0.9.0. банка