Я мог бы немного опоздать, но я только столкнулся с подобной проблемой.Проблема заключается в следующей строке:
String encoding = Base64.encodeToString(authentication.getBytes(), 0);
Если вы измените эту строку так, она должна работать:
String encoding = Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP);
По умолчанию утилита Android Base64 добавляет символ новой строки вконец закодированной строки.Это делает недействительными заголовки HTTP и вызывает «неправильный запрос».
Флаг Base64.NO_WRAP указывает утилите создать закодированную строку без символа новой строки, таким образом сохраняя заголовки HTTP без изменений.