Добрый день.
Подскажите plz.
Делаю приложение работающее с backend rest-api.
как лучше действовать создавать например intentService и из него работать с backend (тогда если приложение упадет, есть большие гарантии, что запрос выполниться) или достаточно выполнять запросы предположим в AsyncTask?
Спасибо.
rest
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: rest
Я делаю синглтон и библиотеку Volley, где юзаю методы отправки данных. В onPause и перед новым запросом, всегда вызываю метод удаления прошлых запросов для данного запроса. Есть правда минус, при повороте экрана, запрос отменяется. Но я решил что пока и так сойдет =)
Вот пример двух взаимосвязанных методов
[syntax=java5]
public void requestDeleteUser(final int _userId, final NetworkListener mCallBack) {
String url = NetworkUtils.getDeleteUserUrl(_userId);
Logger.log(Logger.DEBUG, "test", "delete user: " + url);
JsonObjectRequest req = new JsonObjectRequest(Method.DELETE, url, new JSONObject(),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
response.put(UIUtils.DELETED_USER_ID,_userId);
mCallBack.onResponse(response, DELETE_USER_REQUEST);
} catch (JSONException e) { }
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mCallBack.onErrorResponse(volleyError, DELETE_USER_REQUEST);
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
SecurityManager.getInstance().fillAuthData(params);
return params;
}
};
cancelRequestDeleteUser();
NetworkController.getInstance().addToRequestQueue(req,DELETE_USER_REQUEST);
}
public void cancelRequestDeleteUser() {
cancelPendingRequests(DELETE_USER_REQUEST);
}
[/syntax]
А сам синглтон, я позаимствовал с данной статьи
http://arnab.ch/blog/2013/08/asynchrono ... ng-volley/
Вот пример двух взаимосвязанных методов
[syntax=java5]
public void requestDeleteUser(final int _userId, final NetworkListener mCallBack) {
String url = NetworkUtils.getDeleteUserUrl(_userId);
Logger.log(Logger.DEBUG, "test", "delete user: " + url);
JsonObjectRequest req = new JsonObjectRequest(Method.DELETE, url, new JSONObject(),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
response.put(UIUtils.DELETED_USER_ID,_userId);
mCallBack.onResponse(response, DELETE_USER_REQUEST);
} catch (JSONException e) { }
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mCallBack.onErrorResponse(volleyError, DELETE_USER_REQUEST);
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
SecurityManager.getInstance().fillAuthData(params);
return params;
}
};
cancelRequestDeleteUser();
NetworkController.getInstance().addToRequestQueue(req,DELETE_USER_REQUEST);
}
public void cancelRequestDeleteUser() {
cancelPendingRequests(DELETE_USER_REQUEST);
}
[/syntax]
А сам синглтон, я позаимствовал с данной статьи
http://arnab.ch/blog/2013/08/asynchrono ... ng-volley/
Re: rest
Спасибо за ответ.
Попробую с либой, хотя своя реализация имхо не сложней.
А если сделать эту реализацию хотябы в iner class и при повороте сохранять ссылку на него?
Попробую с либой, хотя своя реализация имхо не сложней.
А если сделать эту реализацию хотябы в iner class и при повороте сохранять ссылку на него?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: rest
Если надо при повороте сохранять запрос, то советую выбрать Loader, а именно AsyncTaskLoader. Это наиболее правильный как по мне вариант, который к тому же советует гугл.