...

четверг, 26 июня 2014 г.

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

В повседневной работе постоянно сталкиваюсь с разработкой приложений использующих REST сервисы. Существующие библиотеки помогающие в построении запросов и их обработку не слишком меня устраивали по ряду причин. Возникла мысль о создании простого инструмента наподобие Universal Image Loader позволяющего быстро строить запросы и парсить полученные данные. В результате появился Android Data Processor

Процессор данных предназначен для выполнения REST запросов к сервисам или локально к файлам.

Запросы могут выполнятьс синхронно или асинхронно. Процессор не содержит парсеров. Для обработки результатов вы используете свои любимые парсеры данных и передаете им полученные данные в виде InputStream, String, JSONObject.



Инициализация процессора


Для использования процессора необходиомо его инициализировать при помощи конфигуратора. Конфигуратор позволяет задать основные параметры запроса согласно http://ift.tt/1mvUXnf, 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 = "";


Override

public 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() {


Override

public void handleMessage(Message msg) {

if (msg.what == ProcessingCentre.SUCCESS) {

LoginResult resultObject = (LoginResult) msg.obj;



} else {

Log.w(«Can't login»);

}

}


};

}


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий