@miklce

Передача callback'a методу в качестве параметра, нормальная практика или костыль?

Реализовал я класс для работы со своим rest-like api, используя OkHTTP
ну например метод GetSomething()

public class GetSomething {
  public void get(Callback callback,int limit, int offset) {
  OkHttpClient client = new OkHttpClient();
  // Готовим запрос, и отправляем как положено, асинхронно..
  // Ну а callback пихаем из параметра
  Request request = new Request.Builder().url(url).build();
  client.newCall(request).enqueue(callback);


А во фрагменте соответственно делаю так:
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
import ru.domain.user.app.api.getSomething;
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  getSomething something = new getSomething();
  Callback callback = new Callback() {
   @Override
   public void onFailure(Call call, IOException e) { e.printStackTrace(); }
   @Override
   public void onResponse(Call call, Response response) throws IOException {
     try {
      String jsonData = response.body().string();
      JSONObject Jobject = new JSONObject(jsonData);
      Log.d("getSomething Resp",  Jobject.toString());
     } catch (JSONException e) {}
}


Всё работает. а у меня ощущения что я начал делать костыли в самом начале проекта...
Так делают или это просто костыль? Как правильней реализовать ?

Я просто недавно залез в Яву, писал себе прекрасно процедурно на пыхе..
Не хочется учится писать криво))

582675.jpg
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
artemgapchenko
@artemgapchenko
В вашем коде нет абсолютно ничего костыльного. Запросы в OkHttp выполняются в фоновом потоке (не в главном, в котором работают все компоненты Android-приложения, а в фоновом), соответственно вам нужно как-то прокинуть в OkHttp вашу реакцию на успешное/ошибочное выполнение запроса. Callback'и b были добавлены в OkHttp как способ добавить такую реакцию на данные, получаемые в фоновом потоке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
jamakasi666
@jamakasi666
Просто IT'шник.
А что конкретно вы хотите получить или сделать callback'ом? Передать ссылку на некий объект и выполнить некую логику или же просто вернуть обратно ответ с учетом переданных данных?
Или передать некий волшебный метод которым воспользуется тот кто его принял?
Ответ написан
Konachan700
@Konachan700
Для таких случаев применяют интерфейсы. Удобно и код выглядит более понятным.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Sports.ru Москва
До 175 000 руб.
KUPIBILET.RU Санкт-Петербург
от 100 000 руб.
Frogogo Москва
от 70 000 руб.
10 дек. 2018, в 09:51
5000 руб./за проект
10 дек. 2018, в 09:49
3000 руб./за проект
10 дек. 2018, в 09:38
1000 руб./за проект