Wpis z mikrobloga

Cześć. Tworzę sobie apkę ucząc się przy okazji Daggera i wykorzystując wzorzec MVP. Mam sobie moduł Api, gdzie podpinany jest klient OkHttp. W nim jest interceptor, który za parametr przyjmuje context. Jak najlepiej/najładniej przesłać do tego modułu ten nieszczęsny context? Przeszukałem trochę Internetu i to chyba nie jest spotykany problem więc coś robię źle. Bo np taka biblioteka do Mockowania https://github.com/mirrajabi/okhttp-json-mock czy też Chuck (swoją drogą polecam) https://github.com/jgilfelt/chuck obie przyjmują context za parametr.

#androiddev
  • 8
@qmar: Ok dzięki :) Ale chyba jednak muszę kompletnie zmienić moją koncepcję. Ogólnie chodziło mi o to, że chciałem mieć dwa "build variants". W jednym ApiModule byłby odpowiedzialny za łączenie z serwerem w drugim ApiModule miałby zamockowane jsony. Ale tym sposobem musiałbym w drugim wariancie wszystkie klasy korzystające z ApiModule nadpisać aby korzystały z ApiModule z "drugiego wariantu". Chyba jednak pozostanę przy dodaniu ifa BuildConfig.FLAVOR do mainapp. Co myślisz?
@Mithrindil: No ten interceptor to taki standard :P Ale przyznaj, że w logcacie jednak ten json nie jest sformatowany i wszystko idzie jedną linią (chyba, że jest na to jakiś sposób). Chuck daje też możliwość zobaczenia co apka wysyła nawet jak nie jesteś podpięty do kompa co czasami się przydaje ;)
@cycun: kiedyś korzystałem przez chwilę z tego: http://lograbbit.com dopóki miałem za free :P a tak jak potrzebuję pretty printa to przeklejam do json editora jakiegoś w sieci

Chuck daje też możliwość zobaczenia co apka wysyła nawet jak nie jesteś podpięty do kompa co czasami się przydaje ;)


@cycun: to niewątpliwie duża zaleta
@cycun: myślę, że to z flavorem zmockowanym jest do zrobienia
Zerknij sobie na anotację @Named

Dostarczanie:

@Provides @Named("cached")
@Singleton
OkHttpClient provideOkHttpClient(Cache cache) {
OkHttpClient client = new OkHttpClient();
client.setCache(cache);
return client;
}

@Provides @Named("non_cached") @Singleton
OkHttpClient provideOkHttpClient() {
OkHttpClient client = new OkHttpClient();
return client;
}

Wykorzystanie:

@Inject @Named("cached") OkHttpClient client;
@Inject @Named("non_cached") OkHttpClient client2;

Mógłbyś zamiast "cached" i "non_cached" przy dostarczaniu podać nazwę Twojego flavora, a