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

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

Войти через TM ID
Похожие вопросы
RentaTeam Москва
от 90 000 до 140 000 руб.
Frogogo Москва
от 70 000 до 100 000 руб.