Авторизация с помощью Retrofit

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());
            }
        });

    }

}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *