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

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

Похожие вопросы