Задать вопрос
@Lordao

Как проверить значение key у Hashmap?

Данные отправляются по Bluetooth другому устройству в виде коллекции HashMap. В зависимости от события данные могут отправляться как HashMap<String, String> или HashMap<String, String[]>. У HashMap значение key является индификатором передаваемых данных, например, message или minerField. Когда данные принимаются, то нужно проверить значения ключа и если значение будет message, значит обновить чат. А если значение minerField, тогда обновить поле массива. Когда пытаюсь пройтись по всем ключам с помощью цикла for (Map.Entry entry: data.entrySet()) мне выкидавает ошибку Error:(48, 56) error: incompatible types: Object cannot be converted to Entry. Как проверить значение ключа, если заранее неизвестно какой тип объекта будет в value.

Исходный код
@Override
    public void startCommunication() {
        while (true) {
            try {
                if (listener != null) {
                    ObjectInputStream ois = new ObjectInputStream(inputStream);
                    Map data = (HashMap) ois.readObject();
                    for (Map.Entry entry: data.entrySet()) {
                        String key = entry.getKey();
                        if (key.equals("message")) {
                            Log.d("message","You got a message");
                            listener.onMessage(data.get("message").toString());
                        } else {
                            listener.onRefreshMinerField(data.get("minerField"));
                        }
                    }
                }
            } catch (IOException e) {
                //Log.d("CommunicatorImpl", e.getLocalizedMessage());
                break;
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void write(String message) {
        try {
            Log.d("CommunicatorImpl", "Write " + message);
            ObjectOutputStream oos = new ObjectOutputStream(outputStream);
            Map<String, String> obj = new HashMap<>();
            obj.put("message", message);
            oos.writeObject(obj);
        } catch (IOException e) {
            Log.d("CommunicatorImpl", e.getLocalizedMessage());
        }
    }

    @Override
    public void write(String[] minerField) {
        try {
            Log.d("CommunicatorImpl", "Write " + Arrays.toString(minerField));
            ObjectOutputStream oos = new ObjectOutputStream(outputStream);
            Map<String, String[]> obj = new HashMap<>();
            obj.put("minerField", minerField);
            oos.writeObject(obj);
        } catch (IOException e) {
            Log.d("CommunicatorImpl", e.getLocalizedMessage());
        }
    }
  • Вопрос задан
  • 239 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы