Retrofit — это REST клиент для Java и Android. Он позволяет легко получить и загрузить JSON (или другие структурированные данные) через веб-сервис на основе REST. В Retrofit вы настраиваете, какой конвертер используется для сериализации данных. Обычно для JSON используется GSon, но вы можете добавлять собственные конвертеры для обработки XML или других протоколов. В Retrofit используется библиотека OkHttp для HTTP-запросов.
Перед тем как приступить к работе с сервером не забудьте добавить в свой файл Manifect
<!-- Для подключения к сети -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Для получении данных о сети -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Зависимости для работы с Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
В интерфейсе задаются команды-запросы для сервера. Команда комбинируется с базовым адресом сайта (baseUrl()) и получается полный путь к странице. Код может быть простым и сложным. Создайте интерфейс JSONPlaceHolderApi
public interface JSONPlaceHolderApi {
@POST("user/login")
Call<LoginResponse> login(@Body LoginRequest loginRequest);
}
У меня Retrifit в отдельном классе NetworkService
public class NetworkService {
private static NetworkService mInstance;
private Retrofit mRetrofit;
private NetworkService(){
Gson gson = new GsonBuilder().setLenient().create();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder client = new OkHttpClient.Builder()
.addInterceptor(interceptor);
mRetrofit = new Retrofit.Builder()
//указываем базовый URL
.baseUrl("URL")
// Добавляем Gson конвертер, чтобы Retrofit сам смог сконвертировать json данные в объекты LoginRequest
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client.build())
.build();
}
public static NetworkService getInstance(){
if (mInstance == null){
mInstance= new NetworkService();
}
return mInstance;
}
public JSONPlaceHolderApi getJSONApi(){
return mRetrofit.create(JSONPlaceHolderApi.class);
}
в классе LoginRequest прописываем данные которые будут отправляться на сервер
public class LoginRequest {
public LoginRequest() {
this.email = email;
this.password = password;
}
@SerializedName("email")
String email;
@SerializedName("password")
String password;
}
В классе LoginReponse прописываем данные которые придут в ответ
public class LoginResponse {
@SerializedName("id")
@Expose
private String id;
@SerializedName("email")
@Expose
private String email;
@SerializedName("nickNama")
@Expose
private String nickName;
@SerializedName("token")
@Expose
private String token;
@SerializedName("error")
@Expose
private String error;
@SerializedName("avatar")
@Expose
private String avatar;
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public String getNickName() {return nickName;}
public void setNickName(String nickName) {this.nickName = nickName;}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getError() {return error;}
public void setError(String error) {this.error = error;}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
В классе активити, где и будет происходить авторизация (у меня это класс Login), соединяем. Авторизация происходит по нажатию кнопки метод — vhod. Первым делом в onCreate находим наши TextView для получения вводимых данных
email = (TextView) findViewById(R.id.log);
pass = (TextView) findViewById(R.id.pass);
И в методе vhod
public void vhodakk(View view) {
//проверка на пустые поля
if (email.getText().toString().length() == 0) {
email.setError("Введите Email");
}
if (pass.getText().toString().length() == 0) {
pass.setError("Ведите пароль");
} else {
final LoginRequest loginRequest = new LoginRequest();
//получение введенных данных
loginRequest.email = email.getText().toString();
loginRequest.password = pass.getText().toString();
Получение JSONPlaceHolderApi из NetworkService и отправление запроса
NetworkService.getInstance().getJSONApi().login(loginRequest).enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
LoginResponse loginResponse = response.body();
Log.d("authLog", loginResponse.getToken());
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Log.d("authLog", "Error: " + t.getMessage());
}
});
}
}
Very interesting details you have observed, thank you for posting.