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

в 11:21, , рубрики: android, builder, parser, requests, 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 = "";

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

};
}

Автор: lordtao

Источник

Поделиться

* - обязательные к заполнению поля