Ответ от Retrofit

Я делаю запрос GET:

public interface CheckUserInDBRequest {
@GET("api/checkUserInDB.php")
Call<ResponseBody> searchForUser(
        @Query("login") String login,
        @Query("pass") String pass
);
}

И я получаю верный ответ || false в json, в зависимости от того, есть ли пользователь в базе данных.

Retrofit.Builder builder = new Retrofit.Builder().baseUrl("https://kurusa.zhecky.net/").addConverterFactory(GsonConverterFactory.create());

Retrofit retrofit = builder.build();

CheckUserInDBRequest client = retrofit.create(CheckUserInDBRequest.class);
Call<ResponseBody> call = client.searchForUser (
        UserLogin.getText().toString(),
        UserPass.getText().toString()
);

call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {

        Toast.makeText(MainActivity.this, response.body().toString(), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {

        Toast.makeText(MainActivity.this, "no ", Toast.LENGTH_SHORT).show();
    }
});

Вот только вывод okHttp3. Не понимаю, как получить нормальный ответ.

Что значит "нормальный ответ"? Вы уже получаете его с помощью response.body()

MatPag 18.05.2018 22:34

@MatPag, я получаю okHttp3 с помощью response.body(). Но в checkUserInDB.php я возвращаю объект json

Bipa 18.05.2018 22:36

Как структурирован ваш ответ JSON? Показать пример

MatPag 18.05.2018 22:38

@MatPag, это очень просто: {"isSet":"true"} || {"isSet":"false"}

Bipa 18.05.2018 22:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала создайте класс, представляющий ваш объект JSON

public class UserResult {
    public boolean isSet;
}

Таким образом реструктурируйте свой звонок Retrofit

@GET("api/checkUserInDB.php")
Call<UserResult> searchForUser(
        @Query("login") String login,
        @Query("pass") String pass
);

Затем в вашем коде:

call.enqueue(new Callback<UserResult>() {
    @Override
    public void onResponse(@NonNull Call<UserResult> call, @NonNull Response<UserResult> response) {
        if (response.isSuccesfull()) {
            UserResult result = response.body();
            //use the value result.isSet where you need it
        } else {
            //something is broken
        }
    }

    @Override
    public void onFailure(@NonNull Call<UserResult> call, @NonNull Throwable t) {

        Toast.makeText(MainActivity.this, "no ", Toast.LENGTH_SHORT).show();
    }
});

спасибо, но я не могу использовать result или result.isSet. Android Studio выдает ошибку cannot resolve method makeText(kurusa.mainapp.MainActivity...)

Bipa 18.05.2018 22:56

Вы где-то оставили часть метода Toast, закомментируйте часть Toast и повторите попытку.

MatPag 18.05.2018 22:58

все еще не работает: c, но по какой-то причине, если вместо result.isSet написать какую-то строку, он работает

Bipa 18.05.2018 23:05

Вы имели в виду, что это if (result.isSet) {// ok} else {// not ok} у вас не сработало

EL TEGANI MOHAMED HAMAD GABIR 18.05.2018 23:15

Вы уверены, что ваш REST отвечает правильно? Протестируйте его в браузере, чтобы убедиться

MatPag 18.05.2018 23:16

этот ответ {"isSet": "true"} || {"isSet": "false"} должно быть {"isSet": true} || {"isSet": false}

EL TEGANI MOHAMED HAMAD GABIR 18.05.2018 23:22

@ALTegani, ага) Я забыл, что Java - это строго типизированный язык. Раньше я писал на php

Bipa 18.05.2018 23:39

@ Біпач все в порядке

EL TEGANI MOHAMED HAMAD GABIR 18.05.2018 23:48

@ALTegani, если это был вопрос - да

Bipa 19.05.2018 00:20

рад за тебя @ Біпач

EL TEGANI MOHAMED HAMAD GABIR 19.05.2018 00:34

@ Біпач Вы можете принять ответ, нажав на галочку рядом со стрелками, если это вам помогло;)

MatPag 19.05.2018 00:42

Другие вопросы по теме