Одинаковые строки не совпадают

213
17 февраля 2018, 22:20

Я получаю с сервера ответ о регистрации. Если ответ 1 то логин свободен, если 0 то нет. В приложении проверяю этот ответ. Но то что мне приходит никак не хочет сравниваться.

` String resp = null;
        try {
            db.execute("registration.php", newacc);
            resp = db.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        //test.setText(resp);
        if (!resp.equals("0")) {
            startActivity(new Intent(Registration.this, Login.class));
        } else toast4.show();`

Я уже перепробовал все что мог но ничего не работает. Если приходит 0, то приложение все равно заходит в блок if и переходит на другую активити. Вот еще PHP код

<?php
require "conn.php";
mysqli_set_charset($conn,"utf8");
if (isset ($_POST['login'],$_POST['password'],$_POST['salt'],$_POST['reg_date'],$_POST['name'],$_POST['number'])){
    $login= $_POST['login'];
    $pass= $_POST['password'];
    $salt= $_POST['salt'];
    $reg_date= $_POST['reg_date'];
    $name= $_POST['name'];
    $number= $_POST['number'];
    $querry0 = mysqli_query($conn,"SELECT login FROM account WHERE login = '$login'");
    if(mysqli_num_rows($querry0) == 0){
        $querry1 = mysqli_query($conn,"INSERT INTO account (login, password,salt, registration_date) VALUES ('$login', '$pass','$salt', '$reg_date')") or die(mysqli_error($conn));
        $querry2 = mysqli_query($conn,"INSERT INTO client (client_name, phone_number, email) VALUES ('$name', '$number','$login' )") or die(mysqli_error($conn));
        echo "1";
    }else echo "0";
}else echo "err";
?>

Перевел строки в HEX: строка с сервера - efbbbf30, а с которой сравниваю - 30.При чем везде стоит кодировка в UTF-8. Как с этим быть?

Answer 1

В общем я теперь просто сравниваю строки в HEX. Костыль, но работает.

Answer 2

php добавляет BOM(Byte Order Mark) в Юникод. Java, а следовательно Андроид при декодировании не удаляет его (уж не знаю почему) и надо это делать самому.
В Вашем случае нужен один символ (как я понял) и можно сравнить только его:

    if (resp.charAt(resp.length() - 1) != '0')) {
        startActivity(new Intent(Registration.this, Login.class));
    } else toast4.show();
READ ALSO
Работа с аппаратным сканером штрих-кода через JavaPOS

Работа с аппаратным сканером штрих-кода через JavaPOS

ЗдравствуйтеЗадача научиться получать данный (массива байт) с аппаратных сканеров штрих-кодов с использованием JavaPOS

169
Именованные параметры в запросах

Именованные параметры в запросах

Есть ли какой нибудь способ/фреймворк в Java обращаться к параметрам запроса по имени, а не по индексу?

170
Oracle JDBC Java9

Oracle JDBC Java9

Как-то можно подружить JDBC драйвер к 12 Ораклу и Java9? Я использую ojdbc и ucp и при компиляции получаю кучу ошибок вида

216
Воспроизвести открывок из аудио

Воспроизвести открывок из аудио

Недавно узнал что на JS можно воспроизводить определённый кусок mp3, то есть, например, есть аудио файл длительностью 30 секунд и есть три кнопки,...

155