
package com.example.testteststest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.IMqttToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity {
private MqttAndroidClient mqttAndroidClient;
private Button btn1;
private MqttConnectOptions getMqttConnectionOption(){
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(false);
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setWill("aaa", "I am going offline".getBytes(), 1, true);
return mqttConnectOptions;
}
private DisconnectedBufferOptions getDisconnectedBufferOptions() {
DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
disconnectedBufferOptions.setBufferEnabled(true);
disconnectedBufferOptions.setBufferSize(100);
disconnectedBufferOptions.setPersistBuffer(true);
disconnectedBufferOptions.setDeleteOldestMessages(false);
return disconnectedBufferOptions;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView txt1 = new TextView(this);
txt1.setText("");
setContentView(txt1);
Button btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ClientId = MqttClient.generateClientId();
mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), "tcp://192.168.137.209:1883", ClientId);
Toast.makeText(getApplicationContext(), "connect 시도중...", Toast.LENGTH_LONG).show();
}
});
try {
IMqttToken token = mqttAndroidClient.connect(getMqttConnectionOption());
token.setActionCallback((new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
mqttAndroidClient.setBufferOpts(getDisconnectedBufferOptions());
Log.e("Connect Success", "Success");
try {
mqttAndroidClient.subscribe("test", 2, new IMqttMessageListener() {
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
String msg = new String(message.getPayload());
txt1.setText(msg);
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Log.e("connect fail", "Failure " + exception.toString());
}
}));
} catch (MqttException e) {
e.printStackTrace();
}
mqttAndroidClient.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
if (topic.equals("test")) {
String msg = new String(message.getPayload());
}
}
@Override
public void
deliveryComplete(IMqttDeliveryToken token) {
}
});
}
}
버튼을 누르면 어플에서 MQTT 브로커에 연결해 센서값을 받아오는 기능을 구현하고싶습니다.
그러나 아직 android studio를 공부한지 2주정도밖에 되지않아 구현에 어려움을 겪고 있습니다. 고수님들의 도움을 얻고자 질문글 올립니다!
먼저 import android.view.View.OnClickListener; , private Button btn1; 부분이 사용되지않았다고 회색으로 뜨는 부분이 앱실행 실패가 된다고 생각하였는데 이를 해결하려면 어떻게 해야할지 조언을 얻고싶습니다.