【发布时间】:2014-08-07 04:12:12
【问题描述】:
我正在尝试在 Android 应用程序上使用 MQTT 客户端,但无法正常工作。
我的 MQTT 客户端是 0.4.0,我的 Android 是 4.0.3。
该应用程序非常简单:它有一个 EditText 和一个用于发布文本的按钮。此外,它还有一个 TextView 来显示收到的消息。
每次点击“发布”按钮,都会显示“连接丢失”消息,有时会出现两三次,因为它尝试多次连接然后断开连接。
此外,如果我不点击按钮,如果我尝试通过另一个客户端发布关于“123456789”主题的消息,则不会发生任何事情(没有显示“消息到达”消息)。
我同时设置了 INTERNET 和 WRITE_EXTERNAL_STORAGE 权限,应用程序没有异常关闭,根本没有发送/接收消息。
这是主活动
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.jar
【问题讨论】:
-
恢复旧帖子,但您设法解决了问题吗?卡在类似的东西上。
-
这是很久以前的事了,所以也许我记错了,但我认为当时我使用不同的 jar 解决了我的问题,正如我在“新信息”部分中所述问题
-
谢谢!设法解决它。我自己的愚蠢错误。
-
@shshnk 我有类似的问题,你是怎么解决的?