gpt4 book ai didi

android - 在 Android 的 onCreate 方法之外调用 mqtt setCallback 方法

转载 作者:行者123 更新时间:2023-11-29 02:31:49 25 4
gpt4 key购买 nike

我正在为我的 android 应用程序使用 paho mqtt libray。我想出于某种目的在 onCreate 方法之外调用 setCallback 方法。在 onCreate 内部它运行良好,但是在 onCreate 方法之外它不起作用。我想为这个 MQTT 连接创建单例类。我无法做到这一点。请建议我如何执行此操作。我的代码如下:

`

package com.example.tausif.mushroomv2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
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 Main2ActivityTest extends AppCompatActivity {

MqttAndroidClient client;

String clientId;

static String host = "tcp://182.133.112.204:1883";

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


client.setCallback(new MqttCallback() {




@Override
public void deliveryComplete(IMqttDeliveryToken token) {

}

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


}

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



}

});


}


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) {



}

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

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

}

}

`

最佳答案

您可以创建一个 MqttHelper 类:

public class MqttHelper {
public MqttAndroidClient mqttAndroidClient;

final String host = "tcp://182.133.112.204:1883";
final String clientId = MqttClient.generateClientId();

public MqttHelper(Context context) {
mqttAndroidClient = new MqttAndroidClient(context, host, clientId);

mqttAndroidClient.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean reconnect, String serverUri) {

}

@Override
public void connectionLost(Throwable throwable) {

}

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

}

@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

}
});
connect();
}

public void setCallback(MqttCallbackExtended callback) {
mqttAndroidClient.setCallback(callback);
}

private void connect() {

MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setCleanSession(false);

try {
mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {

DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
disconnectedBufferOptions.setBufferEnabled(true);
disconnectedBufferOptions.setBufferSize(100);
disconnectedBufferOptions.setPersistBuffer(false);
disconnectedBufferOptions.setDeleteOldestMessages(false);
mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
}

@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Log.w("Mqtt", "Failed to connect to: " + host + exception.toString());
}
});
} catch (MqttException ex) {
ex.printStackTrace();
}
}
}

然后您需要调用MqttHelper 类并将应用程序的上下文作为构造函数参数传递。只需从您的 Activity 中调用下面描述的 startMqtt() 方法。

public void startMqtt(){
mqttHelper = new MqttHelper(getApplicationContext());
mqttHelper.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean b, String s) {

}

@Override
public void connectionLost(Throwable throwable) {

}

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

}

@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

}
});
}

关于android - 在 Android 的 onCreate 方法之外调用 mqtt setCallback 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49299013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com