Бібліотека 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			= "";

	@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");
				}
			}

		};
	}

    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.