Библиотека Android Data Processor для легкого построения REST запросов и их обработки

В повседневной работе постоянно сталкиваюсь с разработкой приложений использующих REST сервисы. Существующие библиотеки помогающие в построении запросов и их обработку не слишком меня устраивали по ряду причин. Возникла мысль о создании простого инструмента наподобие Universal Image Loader позволяющего быстро строить запросы и парсить полученные данные. В результате появился Android Data ProcessorПроцессор данных предназначен для выполнения REST запросов к сервисам или локально к файлам.Запросы могут выполнятьс синхронно или асинхронно. Процессор не содержит парсеров. Для обработки результатов вы используете свои любимые парсеры данных и передаете им полученные данные в виде InputStream, String, JSONObject.Инициализация процессора

Для использования процессора необходиомо его инициализировать при помощи конфигуратора. Конфигуратор позволяет задать основные параметры запроса согласно http://developer.android.com/reference/java/net/URL.html, encoding, timeout и т.д. Эти данные являются базовыми и могут без проблемно модифицироваться при построении конкретных запросов. Инициализацию удобнее всего выполнять в классе наследованном от Application:

private void initDataProcessor () {DataProcessorConfiguration configuration = DataProcessorConfiguration.getBuilder ().setHost («google.com»).setLogEnabled (true).setShowProcessingTime (true).setTimeout (4000).build (); DataProcessor.getInstance ().init (configuration);}

Запросы

В данный момент возможно конструирование GET, POST, MultipartRequest, а также обработка локальных файлов.

Создание запроса

Request request = GetRequest.newInstance ().setLogTag («FB Login to server»).addGetParam («signature», «DH$FHJDDBHJV3393n»).setPath («login.php»).build ();

Request request = PostRequest.newInstance ().addPostParam («email», «some@gmail.com»).addPostParam («password», «any_password»).setLogTag («Login to server»).addGetParam (VAR_SIG, SIGNATURE).setPath («auth2.php»).build ();

Request request = MultipartRequest.newInstance ().addTextBody («userName», «Alex»).addTextBody («email», «some@gmail.com»).addTextBody («password», «any_password»).addTextBody («sex», «male»).addJPEG («imagedata», bitmap, «image.jpg»).setLogTag («Create user»).addGetParam (VAR_SIG, SIGNATURE).setPath («createuser.php»).build ();

Обработка результатов запроса и их размещение в объекте

Полученные данные запроса могут быть обработаны любым вашим любимым парсером. Обработанные данные размещаются в объектах реализующий интерфейсы InputStreamDataInterface, JsonDataInterface, StringDataInterface.

public class LoginResult extends BaseResult implements JsonDataInterface {

public static String token = »; public static String email = »; public static String password = »;

Overridepublic void fillFromJSONObject (JSONObject jsonObject) throws JSONException {if (isSucess (jsonObject)) {token = jsonObject.getString («token»); email = jsonObject.getString («email»); password = jsonObject.getString («password»);}}

Выполнение запроса и получение результатов

Выполнение запроса может быть синхронным или асинхронным. Синхронный запрос возвращает непосредсвенно заполненный объект. Асинхронный запрос возвращает такой же объект через Handler в msg.obj, а результат (успех или ошибка) в msg.what который может быть равен ProcessingCentre.SUCCESS или ProcessingCentre.ERROR

DataProcessor.getInstance ().executeAsync (request, new LoginResult (), handler);

Пример обработки в Handler:

private Handler getLoginHandler () {return new Handler () {

Overridepublic void handleMessage (Message msg) {if (msg.what == ProcessingCentre.SUCCESS) {LoginResult resultObject = (LoginResult) msg.obj; …} else {Log.w («Can’t login»);}}

};}

© Habrahabr.ru