Я новичок в Android и сервисах. Моя цель состоит в том, чтобы иметь возможность настраивать подписки и делать публикации по строкам темы. Строки темы и идентификатор клиента настраиваются после синтаксического анализа ввода текстовых полей. Я использую службу Paho MQTT (скачал исходный код и создал JAR).
Следующее вызывает исключение нулевого указателя в c.publish()
. logcat
показывает исключение в методе IMqttDeliveryToken publish(String topic, MqttMessage message, Object userContext, IMqttActionListener callback)
в MqttAndroidClient
, где берется токен доставки.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set locale;
l = getResources().getConfiguration().locale;
}
@Override
protected void onResume() {
super.onResume();
addButtonListener();
}
private void addButtonListener() {
Button submitButton = (Button) findViewById(R.id.buttonSubmit);
submitButton.setOnClickListener(new OnClickListener() {
// ...
// validation code for fields in layout
// ...
// Finally, this.
MemoryPersistence mPer = new MemoryPersistence();
String clientId = UUID.randomUUID().toString();
String brokerUrl = "tcp://m2m.eclipse.org:1883";
MqttAndroidClient c = new MqttAndroidClient(getApplicationContext(), brokerUrl, clientId, mPer);
try {
c.connect();
String topic = "transfers/topic";
String msg = "topic payload"
MqttMessage m = new MqttMessage();
m.setPayload(msg.getBytes());
m.setQos(2);
m.setRetained(false);
c.publish(topic, m);
} catch (MqttException e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
Подскажите, пожалуйста, как пользоваться сервисом для публикации и подписки? Я просмотрел образец проекта (от Paho Android). LWT и публикация, кажется, объединены, поскольку макет для LWT (activity_publish.xml
), похоже, также используется для публикации.