Один шаблон класса для всех вызовов Web API

#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.