Я уже могу сказать, что это глупый вопрос, но я пытаюсь войти на веб-страницу, используя postUrl(), и когда я явно пишу данные сообщения следующим образом:
String postData = "username=johndoe&password=mypassword";
myWebview.postUrl("https://moodle.domain.com/login/index.php", postData.getBytes());
Это работает, но если я построю postData с использованием переменных:
String postData = "username = "+user+"&password = "+pass;
myWebview.postUrl("https://moodle.domain.com/login/index.php", postData.getBytes());
Не работает. Неверные учетные данные. Я убедился, что обе строки имеют одинаковое значение, и попытался использовать UTF-8.
Я просто не понимаю, в этом нет никакого смысла.
Значит, во втором случае user.equals("johndoe") и pass.equals("mypassword") оба являются true? Вы проверили поведение на стороне сервера? Есть ли у вас доступ на стороне сервера, чтобы иметь возможность работать с отладчиком и проверять, что сервер на самом деле видит (и делает)?
Я удалил приложение и попробовал использовать только второй метод, неверный логин. У меня нет доступа к серверу. Кроме того, есть это предупреждение -> W / ResourceType: для ресурса 0x7f0a0030 индекс записи (48) превышает тип entryCount (14) Ошибка получения записи для 0x7f0a0030 (t = 9 e = 48) (ошибка -75)




Попробуйте следующее
String postData = "username = " + URLEncoder.encode(my_username, "UTF-8") + "&password = " + URLEncoder.encode(my_password, "UTF-8");
webview.postUrl("https://moodle.domain.com/login/index.php",postData.getBytes());
Похоже, что у «пользователя» или «прохода» есть невидимые символы. Тебе нужно:
1) Проверить строку с помощью equals:
String postData1 = "username=johndoe&password=mypassword";
String postData2 = "username = "+user+"&password = "+pass;
System.out.println(postData1.equals(postData2));
2) Попробуйте найти невидимые символы, например:
String postData1 = "username=johndoe&password=mypassword";
String postData2 = "username = "+user+"&password = "+pass;
char[] arr1 = postData1.toCharArray();
char[] arr2 = postData1.toCharArray();
for (int i=0; i< Math.max(arr1.length(), arr2.length(); i++ ) {
if (arr1[i] != arr2[i]) {
System.out.println("Different i " + i);
}
}
Вы правы, я проверил длину обеих строк, первая была 38, вторая 45 ... когда я напечатал значение, я не мог видеть проклятые пустые места до конца. Я просто использовал postData.trim (). GetBytes (), и он работает, большое вам спасибо.
если первый работает, то второй тоже должен работать. Я предполагаю, что браузер хранит данные, которые не позволяют работать второму методу. Попробуйте очистить данные WebView (или просто переустановите приложение). На этот раз протестируйте только второй метод.