В данном занятий мы переделаем с вами логику регистрации. Раньше она у нас работала с помощью shared preferenсes. То есть работало локально. Теперь же мы будем взаимодействовать с сервером, с помощью библиотеки OkHTTP3. Также мы внесли несколько изменений в проект. Давайте посмотрим что мы изменили? Откроем сам наш проект, папочка res, layout, fr_registration.xml. На макете мы увидим, что мы добавили поле имя. Оно нам нужно для того, чтобы взаимодействовать с сервером, так как объект пользователя на сервере содержит поле имя. Теперь можно переходить непосредственно к логике регистрации. Перейдем в Gradle Scripts, build_gradle(Module app). Зайдем в dependencies и добавим dependencies для OkHTTP3. Я говорю сразу то, что я не буду писать некоторые части кода, так как всего запомнить невозможно и в принципе это нормальная практика. То есть необязательно полностью с нуля начинают писать куски какого-то кода. Вы можете спокойно открыть свой старый проект или какой-то пример или доку из интернета и скопировать код оттуда и его уже изменить под свои нужды, это вполне нормальная практика. Дальше! Мы добавили с вами dependencies для OkHTTP3. Теперь давайте добавим buildConfigField для OkHTTP3 URL. То есть, у нас будет какой-то базовый URL, который мы не будем постоянно переписывать, а который будет хранится у нас в buildConfigField. Перейдем, соответственно, в defaultConfig, buildConfigField, 'String', SERVER_URL, так он будет называться и допишем его. Поставим в конце слэш, чтобы быть уверенным, что все будет работать правильно. Теперь давайте перейдем AndroidManifest. Здесь добавим permission для работы с интернетом. Ведь без этого permission, мы просто ничего не сможем сделать и перейдем в Registrationfragment.java в mOnRegistrationClickListener. Будем переписывать эту логику. Начнем с того, что удалим isAddad, но оставим User и сохраним его в переменную User. Как я уже говорил, мы добавили поле Name и, соответственно, мы должны изменить объект для этого, давайте перейдем и сделаем это. (String email, String password). Этот конструктор нам больше не нужен, нам нужен конструктор с вот таким содержанием, чтобы он содержал email, Name и пароль. Также, я добавил нотации в SerializedName из библиотеки Gson для того, чтобы можно было сделать автоматический parsing. Добавим поле mName в конструктор, точка toString(); запятая. Далее, можно делать сам запрос к серверу. Request, а мы забыли с вами просинхронизироваться. Давайте исправим это. Нажимаем синхронизация, чтобы мы получили доступ к запросу из OkHTTP3 библиотеки. Request = new Request.Builder(). Допишем ему URL. Возьмем его BuildConfig.SERVE_URL и добавим к нему сам метод сервера. То есть в нашем случае это registration и добавим в конце слэш. Поскольку, этот метод требует post-запрос, мы должны добавить в него requestBody. Давайте сделаем это. Сделать это можно с помощью метода post и, соответственно, requestBody сделаем requestBody.create(), он потребует mediaType. В нашем случае mediaType будет выступать JSON, перейдем вверх к RegistrationFragment добавим в него Public static final media.Type JSON и media.Type.parse ("application/json; charset-utf-8"). Можете просто скопировать ее, чтобы руками не писать эту строку. Далее, добавим ее в метод создания.create(JSON) запятая. Следующим параметром нужно передать сам JSON. Его мы возьмем из new.Gson().toJson();. Из объекта User запятая с точкой. А также нужно вызвать метод build в конце. Запрос готов. Давайте теперь вызовем его. Для этого, создадим OкHTTPClient. OкHTTPClient равняется new OкHTTPClient();. Client - вызовем сам запрос. Client.newCall(); передаем в него request, который мы создали до этого. Request и делаем вызов с помощью метода.enqueue(); чтобы он работал асинхронно. new Callback() и переопределим методы onFailure и onresponse. Вернее заимплементим, если быть точнее. Кстати говоря, чтобы мы имели доступ к UA нам обязательно нужно делать это в main trade иначе у нас будет ошибка. Так как мы выполняем наш запрос асинхронно, то все Callback() к нам приходят также асинхронно. Для этого, чтобы получить доступ к UA мы будем использовать Handler. Handler просто Hendler, Hendler равняется new Handler() и возьмём из (getActivity().getMainLooper();. Далее, оборачиваем всю работу внутри этих методов в Handler post. Handler.post и с помощью Rannenable() мы будем работать с UA. То есть, в случае если он Failure, то у нас произошла ошибка какая-то. Cкопируем, вставим! Какая ошибка? Ошибка работы с request. То есть request_error. Ctrl+C. В onResponse так же мы все работаем внутри Handlera. Внутри Rannenable(), если быть точнее. Скопировал лишнего, еще разок. handler.post (new Rannenable(). Теперь, внутри if (response.isSuccessful() ). То есть, если запрос успешный, то показываем message, о том что регистрация прошла успешно. Иначе, request.error. Не совсем request.error правда, скорее ошибка регистрации. Также добавим сюда //todo детальная обработка ошибок. Это //todo поможет нам запомнить, что нам нужно добавить сюда детально обработка ошибок. Ведь мы не делаем детальную обработка ошибок, мы просто показываю какую-то ошибку, если запрос выполнялся не успешно. Теперь, давайте посмотрим, как это работает на эмуляторе. Запустим наш эмулятор. Нажмем кнопочку зарегистрироваться, введем какое-нибудь email. Пусть будет te@te.te имя te, пароль. Пароль обязательно вводим восьмизначный, так как сервер будет просить именно восьмизначный пароль. Если мы введем пароль менее восьми знаков, то он покажет соответствующую ошибку, вернее сервер отдаст нам соответствующую ошибку, которую мы сможем распознать с помощью кода ответа. 3 4 5 6 7 8 1 2 3 4 5 6 7 8 и нажмем зарегистрироваться. Как мы видим регистрация прошла успешно. В данном уроке мы научились с вами использовать post-запрос с помощью библиотеки OkHTTP3.