Не удалось опубликовать сообщение на брокере mqtt - PullRequest
0 голосов
/ 14 октября 2018

Я занимаюсь разработкой мобильного приложения, в котором необходимо реализовать mqtt.Мне нужно опубликовать данные в брокере mqtt, но они всегда не публикуются, когда я пытаюсь опубликовать данные изображения, которые являются байтовым массивом изображения.

При публикации не отображалось никаких ошибок, но не было опубликовано никаких данных на брокере, когда я пытался опубликовать сообщение.Сообщение может быть опубликовано только после удаления данных изображения из полезной нагрузки, которая представляет собой Pichex.

Все данные, опубликованные в брокере mqtt, необходимо преобразовать в шестнадцатеричный код ascii.Массив байтов изображения также необходимо преобразовать в шестнадцатеричный строковый код ascii перед публикацией в брокере, поскольку это является требованием проекта.

private void publish(){
    String command = "000000";
    String reserve = "303030303030303030303030303030303030303030303030";
    String tag = "tag";

    name = eTname.getText().toString();
    price = eTprice.getText().toString();
    type = TypeS.getSelectedItem().toString();
    desc = eTdesc.getText().toString();

    userid = MainActivity.getGetuserid();

    String namehex = toHexString(name);
    String pricehex = toHexString(price);
    String typehex = toHexString(type);
    String deschex = toHexString(desc);
    String useridhex = toHexString(userid);

    Bitmap PicBitmap = ((BitmapDrawable)iVpic.getDrawable()).getBitmap();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    PicBitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
    byte[] picbyte = bos.toByteArray();

    String pichex = bytesToHex(picbyte);

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
    Date currentTime = Calendar.getInstance().getTime();
    String currentTimeString = df.format(currentTime);

    String payload = "{command:" + command + ", reserve:" + reserve + ", Client ID:" + serverConnectTo + ", Posted name:" + namehex +
            ", Posted Price:" + pricehex + ", Posted Type:" + typehex + ", Posted Description:" + deschex
            + ", Posted Picture:"  + pichex + ", Date Time Posted:"  + currentTimeString +  ", User ID:" + useridhex + "}";

    byte[] encodedPayload = new byte[0];

    try {
        encodedPayload = payload.getBytes();
        MqttMessage message = new MqttMessage(encodedPayload);
        message.setQos(qos);
        mqttClient.publish(topic, message);
    } catch (MqttException e) {
        e.printStackTrace();
    }
}
   public static String toHexString(String input) {
    return String.format("%x", new BigInteger(1, input.getBytes()));
}

public static String bytesToHex(byte[] in) {
    final StringBuilder builder = new StringBuilder();
    for(byte b : in) {
        builder.append(String.format("%02x", b));
    }
    return builder.toString();
}

Значение шестнадцатеричной строки изображения, которое необходимо опубликоватьэто:

Это изображение, которое необходимо опубликовать

Размер изображения составляет около 100 КБ.

Сообщение может быть опубликовано только после удаления данных изображенияиз полезной нагрузки, которая является Pichex:

String payload = "{command:" + command + ", reserve:" + reserve + ", Client ID:" + serverConnectTo + ", Posted name:" + namehex + ", Posted Price:" + pricehex + ", Posted Type:" + typehex + ", Posted Description:"  + deschex + ", Date Time Posted:"  + currentTimeString +  ", User ID:" + useridhex + "}";

Сообщение может быть получено подписчиком, если Pichex удален:

{command:000000, reserve:303030303030303030303030303030303030303030303030, Client ID:Server, Posted name:627572676572, Posted Price:392e3939, Posted Type:6e6f6f646c65, Posted Description:616a6468, Date Time Posted:2018-10-14 08.09.29, User ID:696b6f6d61}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...