Java 当我在其他活动中使用mqtt客户机时,它们会向我显示错误
当我在其他活动中使用mqtt客户机时,它们会显示错误,当我在OnDestroy中关闭客户机,然后在不同的活动中使用客户机时,它不会给出错误,但setactioncallback不起作用,它不会给出成功和失败 主要活动Java 当我在其他活动中使用mqtt客户机时,它们会向我显示错误,java,android,mqtt,paho,Java,Android,Mqtt,Paho,当我在其他活动中使用mqtt客户机时,它们会显示错误,当我在OnDestroy中关闭客户机,然后在不同的活动中使用客户机时,它不会给出错误,但setactioncallback不起作用,它不会给出成功和失败 主要活动 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
login = findViewById(R.id.btn);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String clientId = MqttClient.generateClientId();
client =
new MqttAndroidClient(MainActivity.this, "tcp://broker.hivemq.com:1883",
clientId);
try {
MqttConnectOptions options = new MqttConnectOptions();
options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
IMqttToken token = client.connect();
token.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
// We are connected
Log.d(TAG, "onSuccess");
gotosubscribelist();
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
// Something went wrong e.g. connection timeout or firewall problems
Log.d(TAG, "onFailure");
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
});
}
private void gotosubscribelist()
{
Intent intent = new Intent(this,SubscribelistActivity.class);
intent.putExtra("client", String.valueOf(client));
startActivity(intent);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
client.unregisterResources();
client.close();
}
订阅活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_subscribelist);
try {
MainActivity.client.connect();
} catch (MqttException e) {
e.printStackTrace();
}
channel = findViewById(R.id.channel);
subscribe = findViewById(R.id.subscribe);
mRec = (RecyclerView) findViewById(R.id.recyclerview);
newlist = new ArrayList<>();
adapter = new ChannelAdapter(this,newlist);
linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRec.setHasFixedSize(true);
mRec.setLayoutManager(linearLayoutManager);
mRec.setAdapter(adapter);
subscribe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
subscribe();
}
});
}
private void subscribe()
{
Log.e("hi","1");
final String topic = channel.getText().toString();
int qos = 1;
try {
IMqttToken subToken = MainActivity.client.subscribe(topic, qos);
subToken.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
Log.e("suc","create");
newlist.add(topic);
}
@Override
public void onFailure(IMqttToken asyncActionToken,
Throwable exception) {
Log.e("e",exception.getMessage());
}
});
adapter.notifyDataSetChanged();
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
MainActivity.client.unregisterResources();
MainActivity.client.close();
}
当我把client.unregisterResources和client.close放在onDestroy中时,它没有显示错误,但在subscribe函数中,它没有在成功和失败时运行,请给出一些建议
渠道活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_channel);
try {
MainActivity.client.connect();
MainActivity.client.isConnected();
} catch (MqttException e) {
e.printStackTrace();
}
message = findViewById(R.id.msg);
publish = findViewById(R.id.publish);
name = getIntent().getExtras().get("currentchannelname").toString();
Rec = (RecyclerView) findViewById(R.id.recyclerview_msg);
newlist = new ArrayList<>();
adapter = new msgAdapter(this,newlist);
linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
Rec.setHasFixedSize(true);
Rec.setLayoutManager(linearLayoutManager);
Rec.setAdapter(adapter);
getmessage();
publish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
publishmsg();
}
});
}
private void publishmsg()
{
String topic = name;
String payload = message.getText().toString().trim();
byte[] encodedPayload = new byte[0];
try {
encodedPayload = payload.getBytes("UTF-8");
MqttMessage message = new MqttMessage(encodedPayload);
MainActivity.client.publish(topic, message);
} catch (UnsupportedEncodingException | MqttException e) {
e.printStackTrace();
}
}
private void getmessage()
{
MainActivity.client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
newlist.add(message.toString());
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
});
adapter.notifyDataSetChanged();
}
@Override
protected void onDestroy() {
super.onDestroy();
MainActivity.client.unregisterResources();
MainActivity.client.close();
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_频道);
试一试{
MainActivity.client.connect();
MainActivity.client.isConnected();
}捕获(MqttException e){
e、 printStackTrace();
}
message=findviewbyd(R.id.msg);
publish=findviewbyd(R.id.publish);
name=getIntent().getExtras().get(“currentchannelname”).toString();
Rec=(RecyclerView)findViewById(R.id.RecyclerView_msg);
newlist=newarraylist();
适配器=新的msgAdapter(此,新列表);
linearLayoutManager=新的linearLayoutManager(getApplicationContext());
linearLayoutManager.setOrientation(linearLayoutManager.VERTICAL);
Rec.setHasFixedSize(真);
Rec.setLayoutManager(linearLayoutManager);
Rec.setAdapter(适配器);
getmessage();
publish.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
publishmsg();
}
});
}
私有无效publishmsg()
{
字符串主题=名称;
字符串负载=message.getText().toString().trim();
字节[]encodedPayload=新字节[0];
试一试{
encodedPayload=payload.getBytes(“UTF-8”);
MqttMessage=新MqttMessage(encodedPayload);
MainActivity.client.publish(主题、消息);
}捕获(不支持编码异常| MqttException e){
e、 printStackTrace();
}
}
私有void getmessage()
{
MainActivity.client.setCallback(新的MqttCallback(){
@凌驾
公共无效连接丢失(可丢弃原因){
}
@凌驾
public void messageArrived(字符串主题,MqttMessage消息)引发异常{
newlist.add(message.toString());
}
@凌驾
公共无效交付完成(IMQTTDDeliveryToken代币){
}
});
adapter.notifyDataSetChanged();
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
MainActivity.client.unregisterResources();
MainActivity.client.close();
}
删除
@Override
protected void onDestroy() {
super.onDestroy();
MainActivity.client.unregisterResources();
MainActivity.client.close();
}
从订阅活动中删除
@Override
protected void onDestroy() {
super.onDestroy();
MainActivity.client.unregisterResources();
MainActivity.client.close();
}
从
subscribebeactivity
中,我也在频道活动中使用了客户端。频道活动通过单击循环启动查看项目(subscribechannellist)仅在MainActivity中使用上述方法。我仅从订阅和频道活动中删除close,但setactioncallback不适用于订阅频道始终针对一个问题提问。你的崩溃就是由于这个原因,最好在@mayur_123发布另一个问题,但我也在channel activity中使用了client,channel activity start by click recyclerview item(订阅频道列表)仅在MainActivity only中使用上述方法我从订阅和频道Activity中删除close,但setactioncallback不适用于订阅频道始终针对一个问题提问。你的崩溃就是因为这个,最好再贴一个问题@mayur_123