Всем привет! Имеется проект приложения в котором сетевые запросы выполняются с помощью Retrofit
, а результат парсится через Jsoup
. (У сайта нет API, пришлось парсить HTML). Проект делится на 2 package: api
и application
, между которыми создан интерфейс SomeSiteSDK
. Вот пример обращения к API из пакета приложения
SomeSiteSDK.messages().send(userId, "Message text"). execute(new SimpleRequestListener(){
@Override
public void onSuccess(){}
@Override
public void onError(int type){}
}
Каждый метод класса SomeSDK
возвращает экземпляр класса со всеми методами, относящимися к определенной, так скажем, группе, например SDKMessages
, SDKFriends
. Все методы таких групповых классов на вход принимают параметры запроса (id пользователя, и т.д) и возвращают экземпляр класса (1 класс = 1 запрос). У каждого такого класса есть метод execute
куда надо передать интерфейс слушателя запроса. Это может быть или SimpleRequestListener
с методом onSuccess
, если запрос обычный, для совершения действия и ничего не возвращает или же, что-то возвращающий к примеру FriendsRequestListener
, возвращающий коллекцию из моделей Friend
в метод onResponse
. У любого интерфейса есть метод onError
куда приходит тип ошибки.
Теперь самое интересное: во всех классах Request
идет обращение к Retrofit
, происходит парсинг данных. В пакете api
реализован Retrofit
, там и DocumentConverterFactory
, который каждый ответ от сервера конвертирует в Document
через Jsoup
, там и интерфейс ApiService
в котором лежат все запросы.
Получается такая система
Activity, Fragment > (RequestListener) -> SomeSDK > (Callback) > Retrofit > (RequestListener) > Activity, Fragment
Хорошо ли получилось? Чего бы вы изменили? Было бы замечательно заменить конвертеры с Document
на конечные данные, но суть в том, что один запрос к SomeSDK
порождвет несколько запросов к Retrofit
, а работу с API хочется сделать минимумом кода
Вообщем, жду критики!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть LinkedHashMap, где ключ - это вопрос, а значение TreeMap, в котором ключи - это ответы, а значение bool(true ответ верный, false нет)
Есть сущность PersonУ нее есть геттер getId()