Как получить KEYCODE элемента char массива?


(Hulk) #1

Раньше чтобы ввести test делал так (нужно именно такой способ, НЕ sendkeys!)
driver.pressKeyCode(AndroidKeyCode.KEYCODE_T);
driver.pressKeyCode(AndroidKeyCode.KEYCODE_E);
driver.pressKeyCode(AndroidKeyCode.KEYCODE_S);
driver.pressKeyCode(AndroidKeyCode.KEYCODE_T);

Сейчас хочу сделать метод, передавать туда любую строку и нажимать по символам в строке
public void writeMessage(String text) {
char[] array = text.toCharArray();
int j = 0;
int [] arrayNew = new int[array.length];
arrayNew[j] = KeyCode.getKeyCode(array[j]);// тут ошибка да, не знаю как сделать
for (int i = 0; i < array.length; i++) {
driver.pressKeyCode(arrayNew[i]);
}
}

проблема в том не знаю как получить интовый KeyCode и у символа
Как можно поступить?


(Taras) #2

ну во первих KeyCode ни енама ни класса такого нету в Appium, каждое поля класса AndroidKeyCode ето int. Код Что ви хотели сказать етой строчкой тоже непонятно - arrayNew[j] = KeyCode.getKeyCode(array[j]);
Впринципи можно сделать через рефлексию
AndroidKeyCode.class.getField(“KEYCODE_” + String.valueOf(array[i]).toUpperCase())
но будет работать только для букв и цифр, для спецсимволов нужно костиль дописать


(Hulk) #3

примерную реализцию понял, ваш код выдаст ошибку
java.lang.reflect.Field cannot be converted to int


(Taras) #4

от тфу ти, я думал там String возвращаеться, там же int-и,

try {
			int code = AndroidKeyCode.class.getField("KEYCODE_" + String.valueOf("h")).getInt(null);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}