В повседневной работе постоянно сталкиваюсь с разработкой приложений использующих 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);
}
}
}
};
Пример приложения можно посмотреть по ссылке