使用Android APP的Common MQTT类

时间:2018-01-18 05:56:05

标签: java android mqtt

我是新手android开发人员,我正在为我的Android应用程序使用MQTT协议。 我已经从互联网上找到了MQTT的代码。但问题是我必须为每个冗余的活动使用这个MQTT代码。我想创建一个常见的java类 每当我需要MQTT连接和通信时,都可以随时调用。我已经尝试但失败了。请问有人如何处理这个问题?代码如下:

com.example.ab.mushroomv2;


import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
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.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class DashboardActivity extends AppCompatActivity {


final Context context = this;

//private EditText result;


private static final String TAG = "DA";


ProgressBar p_temp;
TextView progressingTemp;



MqttAndroidClient client;
String clientId;
static String topicTemp = "mushroom/temp";

String subMsg, top;
static String host = "tcp://iot.eclipse.org:1883";

Handler progressHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard);


    p_temp = (ProgressBar) findViewById(R.id.progress_bar_temp);


    progressingTemp = (TextViewfindViewById(R.id.progress_circle_temp_text);




    establish();





    client.setCallback(new MqttCallback() {


        @Override
        public void connectionLost(Throwable cause) {
            establish();


        }

        @Override
        public void messageArrived(String topic, MqttMessage message) throws 
           Exception {

            subMsg = new String(message.getPayload());

            top=new String(topic);
            if(top.contains("temp"))
            {


                double a=Double.parseDouble(subMsg);
                final int  msgTemp = (int) a;

                Log.d(TAG, String.valueOf(msgTemp));

                new Thread(new Runnable() {
                    public void run() {


                        progressHandler.post(new Runnable() {
                            public void run() {
                                p_temp.setProgress(msgTemp);
                                progressingTemp.setText("" + msgTemp + " ℃ 
                          ");
                            }
                        });
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }
                }).start();
            }

        }


        @Override
        public void deliveryComplete(IMqttDeliveryToken token) {

        }
          });
         }








     public void establish() {
     clientId = MqttClient.generateClientId();
     client = new MqttAndroidClient(this.getApplicationContext(), host, 
     clientId);

     try {
        IMqttToken token = client.connect();
        token.setActionCallback(new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                // We are connected
                Toast.makeText(DashboardActivity.this, "Client Connected", 
            Toast.LENGTH_SHORT).show();


                try {
                    client.subscribe(topicTemp, 0);

                } catch (MqttException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable 
      exception) {

                Toast.makeText(DashboardActivity.this, "Client failed to 
              Connect", Toast.LENGTH_SHORT).show();
                // establish();

            }
        });
    } catch (MqttException e) {
        e.printStackTrace();
    }

   }
      }

1 个答案:

答案 0 :(得分:0)

您需要创建一个单例类。这是一个样本。

public class SocketIO {

private static final String TAG = SocketIO.class.getSimpleName();
private static SocketIO instance;
private Socket socket;

private SocketIO() {
    try {
        socket = IO.socket("http://ur_url_here");
    } catch (URISyntaxException e) {
        e.printStackTrace();
        Log.e(TAG, e.getMessage());
    }
}

public static synchronized SocketIO getInstance() {
    if (instance == null) {
        instance = new SocketIO();
    }
    return instance;
}

public Socket getSocket() {
    return socket;
}

public void open() {
    if (socket != null)
        socket.open();
}

public void close() {
    if (socket != null)
        socket.close();
}}