#android #web-services #android-asynctask
#Android #веб-сервисы #android-asynctask
Вопрос:
В моем приложении у меня много вызовов веб-API, которые возвращают мне JSON. Я пытаюсь сделать это просто. Я не хочу создавать AsyncTask
в каждом фрагменте. Я много чего перепробовал, но ничего не подсказало мне, как это сделать. Мне нужно решение одного класса, в котором я вызываю метод с аргументом url и получаю результат при вызове фрагмента или действия. Может кто-нибудь поделиться лучшими практиками для этого?
Я пробовал библиотеку otto, но, похоже, она не соответствует моим требованиям.
Комментарии:
1. Наконец-то я нашел его. Библиотека Volley — это конечная судьба. 🙂 чувствую себя счастливым. 😉 android.googlesource.com/platform/frameworks/volley
Ответ №1:
Веб-связь не должна выполняться в основном потоке, поэтому необходима какая-то потоковая передача. Я думаю, что AsyncTask — самый простой способ. Я предлагаю создать абстрактный класс, реализовать сетевой материал и оставить вывод синтаксического анализа для дочерних классов. Что-то вроде этого:
abstract class DownloadJSON extends AsyncTask<...>{
DownloadJSON(List<NameValuePair> httpParams){...}
JSONObject doInBackground(String... urls){... return mJSONObject}
abstract void onPostExecute(JSONObject json);
}
Вы можете переопределить doInBackground
для дальнейшего фонового анализа или просто отобразить содержимое onPostExecute
.
Ответ №2:
Пожалуйста, проверьте библиотеку под названием Retrofit. Он превращает ваш REST API в интерфейс Java и обеспечивает асинхронное выполнение запросов. Он даже преобразует ваш ответ JSON в объекты Java.