В повседневной работе постоянно сталкиваюсь с разработкой приложений использующих REST сервисы. Существующие библиотеки помогающие в построении запросов и их обработку не слишком меня устраивали по ряду причин. Возникла мысль о создании простого инструмента наподобие Universal Image Loader позволяющего быстро строить запросы и парсить полученные данные. В результате появился Android Data Processor
Процессор данных предназначен для выполнения REST запросов к сервисам или локально к файлам.
Запросы могут выполнятьс синхронно или асинхронно. Процессор не содержит парсеров. Для обработки результатов вы используете свои любимые парсеры данных и передаете им полученные данные в виде InputStream, String.
Инициализация процессора
Для использования процессора необходиомо его инициализировать при помощи конфигуратора. Конфигуратор позволяет задать основные параметры запроса согласно http://developer.android.com/reference/java/net/URL.html, encoding, timeout и т.д. Эти данные являются базовыми и могут без проблемно модифицироваться при построении конкретных запросов. Инициализацию удобнее всего выполнять в классе наследованном от Application:
Запросы
В данный момент возможно конструирование GET, POST, MultipartRequest а также обработка локальных файлов.
Создание запроса
Обработка результатов запроса и их размещение в объекте
Полученные данные запроса могут быть обработаны любым вашим любимым парсером. Обработанные данные размещаются в объектах реализующий интерфейсы InputStreamDataInterface, StringDataInterface.
Выполнение запроса и получение результатов
Выполнение запроса может быть синхронным или асинхронным. Синхронный запрос возвращает непосредственно заполненный объект создаваемый в случае успешного запроса. Асинхронный запрос возвращает такой же объект или Exception в случае проблем через Callback.
Пример обработки в Callback:
Пример приложения можно посмотреть по ссылке
Процессор данных предназначен для выполнения REST запросов к сервисам или локально к файлам.
Запросы могут выполнятьс синхронно или асинхронно. Процессор не содержит парсеров. Для обработки результатов вы используете свои любимые парсеры данных и передаете им полученные данные в виде InputStream, String.
Инициализация процессора
Для использования процессора необходиомо его инициализировать при помощи конфигуратора. Конфигуратор позволяет задать основные параметры запроса согласно 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, StringDataInterface.
public class LoginResult implements StringDataInterface { public static String token = ""; public static String email = ""; public static String password = ""; @Override public void fillFromString(String src) throws Exception { JSONObject jsonObject = new JSONObject(src); token = jsonObject.getString("token"); email = jsonObject.getString("email"); password = jsonObject.getString("password"); }
Выполнение запроса и получение результатов
Выполнение запроса может быть синхронным или асинхронным. Синхронный запрос возвращает непосредственно заполненный объект создаваемый в случае успешного запроса. Асинхронный запрос возвращает такой же объект или Exception в случае проблем через Callback.
DataProcessor.getInstance().executeAsync(request, LoginResult.class, handler);
Пример обработки в Callback:
private DataProcessor.Callback callback = new DataProcessor.Callback() { @Override public void onFinish(Object obj, int what) { if (what == HttpStatus.SC_OK) { ... успешные действия } else { Exception ex = (Exception) obj; if (ex instanceof IOException) { Log.e("IO Error", ex); } else { Log.e("Error", ex); } } } };
Пример приложения можно посмотреть по ссылке