Данные отправляются по 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());
}
}