MQTT AWS для Android через исключение «Уже подключен» - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь реализовать mqtt aws iot в моем приложении для Android. Я пробую пример приложения, в котором я поместил необходимые значения, такие как CognitoPoolID и Конечная точка и Регион . Вот мой пример кода ниже

инициализация

 clientId = UUID.randomUUID().toString();
    tvClientId.setText(clientId);

    // Initialize the AWS Cognito credentials provider
    credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(), // context
            COGNITO_POOL_ID, // Identity Pool ID
            MY_REGION // Region
    );


**//MQTTManager instance creation**
mqttManager = new AWSIotMqttManager(clientId, CUSTOMER_SPECIFIC_ENDPOINT);
    mqttManager.setAutoReconnect(true);
    mqttManager.setKeepAlive(10);

Создание соединения

 try {
            mqttManager.connect(credentialsProvider, new AWSIotMqttClientStatusCallback() {
                @Override
                public void onStatusChanged(final AWSIotMqttClientStatus status,
                                            final Throwable throwable) {
                    Log.d(LOG_TAG, "Status = " + String.valueOf(status));

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (status == AWSIotMqttClientStatus.Connecting) {
                                tvStatus.setText("Connecting...");

                            } else if (status == AWSIotMqttClientStatus.Connected) {
                                tvStatus.setText("Connected");

                            } else if (status == AWSIotMqttClientStatus.Reconnecting) {
                                if (throwable != null) {
                                    Log.e(LOG_TAG, "Connection error.", throwable);
                                }
                                tvStatus.setText("Reconnecting");
                            } else if (status == AWSIotMqttClientStatus.ConnectionLost) {
                                if (throwable != null) {
                                    Log.e(LOG_TAG, "Connection error.", throwable);
                                    throwable.printStackTrace();
                                }
                                tvStatus.setText("Disconnected");
                            } else {
                                tvStatus.setText("Disconnected");

                            }
                        }
                    });
                }
            });
        } catch (final Exception e) {
            Log.e(LOG_TAG, "Connection error.", e);
            tvStatus.setText("Error! " + e.getMessage());
        }

Я получаю значение статуса вот так

LogMainActivity: Status = Connecting
LogMainActivity: Status = Reconnecting
LogMainActivity: Connection error.
    MqttException (0) - java.io.IOException: Already connected
        at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:664)
        at java.lang.Thread.run(Thread.java:784)
     Caused by: java.io.IOException: Already connected
        at java.io.PipedOutputStream.connect(PipedOutputStream.java:100)
        at java.io.PipedInputStream.connect(PipedInputStream.java:191)
        at org.eclipse.paho.client.mqttv3.internal.websocket.WebSocketReceiver.<init>(WebSocketReceiver.java:42)
        at org.eclipse.paho.client.mqttv3.internal.websocket.WebSocketSecureNetworkModule.start(WebSocketSecureNetworkModule.java:78)
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:650)
        at java.lang.Thread.run(Thread.java:784) 

Я очень новичок в использовании сервисов aws, поэтому просто немного исправлю это, если кто-то сталкивался с такой проблемой, пожалуйста, обратитесь к решению. Спасибо

...