Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我在其他活动中使用mqtt客户机时,它们会向我显示错误_Java_Android_Mqtt_Paho - Fatal编程技术网

Java 当我在其他活动中使用mqtt客户机时,它们会向我显示错误

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

当我在其他活动中使用mqtt客户机时,它们会显示错误,当我在OnDestroy中关闭客户机,然后在不同的活动中使用客户机时,它不会给出错误,但setactioncallback不起作用,它不会给出成功和失败

主要活动

 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