Here is my Singleton implementation for the MQTT client:
public class MQTTConnection extends ServerConnectionImpl { private static String TAG = MQTTConnection.class.getSimpleName(); private static Context mContext; private static MqttAndroidClient mqttAndroidClient; private static String clientId; private static MQTTConnection sMqttConnection = null; private MQTTConnection() { } public static MQTTConnection getInstance(Context context) { if (null == sMqttConnection) { mContext = context; init(); } return sMqttConnection; } public static void reconnectToBroker() { try { if (sMqttConnection != null) { sMqttConnection.disconnect(); } init(); } catch (Exception e) { e.printStackTrace(); } } private static void init() { sMqttConnection = new MQTTConnection(); setClientId(); connectToBroker(); } private static void connectToBroker() { String ip = STBPreferences.getInstance(mContext).getString(Constants.KEY_MQTT_SERVER_IP, null); if (ip == null) { ip = Constants.MQTT_SERVER_IP; } final String uri = Constants.MQTT_URI_PREFIX + ip + ":" + Constants.MQTT_SERVER_PORT; mqttAndroidClient = new MqttAndroidClient(mContext.getApplicationContext(), uri, clientId); mqttAndroidClient.setCallback(new MqttCallbackExtended() { @Override public void connectComplete(boolean reconnect, String serverURI) { if (reconnect) { LogUtil.d(TAG, "Reconnected to : " + serverURI);
Here is a post by Model. Change the model class to your needs.
public class Message { @SerializedName("type") private String type; @SerializedName("name") private String name; @Expose @SerializedName("data") private Object data; public Message(String type, String name, Object data) { this.type = type; this.name = name; this.data = data; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } @Override public String toString() { return "Message{" + "type=" + type + "\n" + "name=" + name + "\n" + "data=" + data.toString() + '}'; } }
Get an MQTT instance in your activity
MQTTConnection mqttConnection = HTTPConnection.getInstance(mContext);
Post message
mqttConnectin.sendMessage(new Message( ... ));
EDIT 1: Here is my ServerConnectionImpl class for your reference.
public class ServerConnectionImpl extends ConfigurationChangeListenerImpl implements ServerConnection { private static final String TAG = ServerConnectionImpl.class.getSimpleName(); private static ArrayList<ConfigurationChangeListenerImpl> sConfigurationChangeListeners = new ArrayList<>(); @Override public boolean isInternetEnabled() { return false; } @Override public ResponseData getSubscriptionDetails(String serialNumber) { return null; } @Override public void sendMessage(Message message, WebSocket webSocket) { } @Override public void sendMessage(Message message) { } @Override public void sendMessageToAll(Message message) { }
}
You can use your own implementation for the ServerConnectionImpl class.
Gaurav
source share