Я делаю запрос 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. Не понимаю, как получить нормальный ответ.
@MatPag, я получаю okHttp3 с помощью response.body(). Но в checkUserInDB.php я возвращаю объект json
Как структурирован ваш ответ JSON? Показать пример
@MatPag, это очень просто: {"isSet":"true"} || {"isSet":"false"}




Сначала создайте класс, представляющий ваш объект 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...)
Вы где-то оставили часть метода Toast, закомментируйте часть Toast и повторите попытку.
все еще не работает: c, но по какой-то причине, если вместо result.isSet написать какую-то строку, он работает
Вы имели в виду, что это if (result.isSet) {// ok} else {// not ok} у вас не сработало
Вы уверены, что ваш REST отвечает правильно? Протестируйте его в браузере, чтобы убедиться
этот ответ {"isSet": "true"} || {"isSet": "false"} должно быть {"isSet": true} || {"isSet": false}
@ALTegani, ага) Я забыл, что Java - это строго типизированный язык. Раньше я писал на php
@ Біпач все в порядке
@ALTegani, если это был вопрос - да
рад за тебя @ Біпач
@ Біпач Вы можете принять ответ, нажав на галочку рядом со стрелками, если это вам помогло;)
Что значит "нормальный ответ"? Вы уже получаете его с помощью
response.body()