J'utilise retrofit pour obtenir des données de l'API Flickr. La méthode dans laquelle je fais l'appel ressemble à ceci:
public static List<String> getImageIds(int size) {
Call<PhotosList> call = flickrService.getPhotos(apiKey, format, "1");
Log.d("TEMP_TAG", "photo url: " + call.request().url().toString());
photoIds = new ArrayList<String>();
call.enqueue(new Callback<PhotosList>(){
@Override
public void onResponse(Call<PhotosList> call, Response<PhotosList> response) {
Log.d("TEMP_TAG", "it's getting here");
PhotosList photosList = response.body();
List<Photo> photos = photosList.getPhotos().getPhoto();
for(Photo photo : photos) {
Log.d("TEMP_TAG", "adding photo id to list: " + photo.getId());
photoIds.add(photo.getId());
}
}
@Override
public void onFailure(Call<PhotosList> call, Throwable t) {
// TODO: Clean up
Log.d("TEMP_TAG", "photoId: ");
}
});
Log.d("TEMP_TAG", "it's getting here too");
return photoIds;
}
Cependant, il n'entre jamais dans la méthode onResponse()
. La première instruction log dans onResponse()
ne s'imprime jamais, pas plus que l'instruction log dans onFailure()
. Lorsque j'essaie d'entrer l'URL renvoyée par call.request().url().toString()
dans le navigateur, cela fonctionne très bien et j'obtiens le JSON attendu. Pourquoi ma méthode enqueue()
ne se déclenche-t-elle jamais?
Merci pour toute aide!
Utilisez HttpLoggingInterceptor avec Retrofit.
Si cela vous aide, ajoutez ceci dans votre build.gradle -
//Retrofit and OkHttp for Networking
compile 'com.squareup.retrofit2:retrofit:2.4.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
//Logging Network Calls
compile 'com.squareup.okhttp3:logging-interceptor:3.10.0'
À l'intérieur de votre APIClient class
Ajoute ça -
public class ApiClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
if(retrofit==null){
retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
}
return retrofit;
}
}
Code Kotlin
val interceptor : HttpLoggingInterceptor = HttpLoggingInterceptor().apply {
this.level = HttpLoggingInterceptor.Level.BODY
}
val client : OkHttpClient = OkHttpClient.Builder().apply {
this.addInterceptor(interceptor)
}.build()
fun getService(): Service {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(LiveDataCallAdapterFactory())
.client(client)
.build()
.create(Service::class.Java)
}
Et vous pourrez enregistrer les appels du réseau de mise à niveau que vous effectuez.
Faites-moi savoir si vous avez besoin de plus d'informations.
Un intercepteur OkHttp qui enregistre les données de demande et de réponse HTTP.
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(Level.BASIC);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
Vous pouvez modifier le niveau de journalisation à tout moment en appelant setLevel
.
Il y a 4 niveaux: AUCUN, BASIQUE, EN-TÊTES, CORPS
Pour vous connecter à un emplacement personnalisé, transmettez une instance Logger
au constructeur.
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new
Logger() {
@Override public void log(String message) {
Log.d(TAG, "message: ");
}
});
Depuis Gradle
compile 'com.squareup.okhttp3:logging-interceptor:(insert latest version)'
Suivez ceci référence
EDITED: J'ai également trouvé cette bibliothèque qui a une structure très agréable et un journal propre. Essayez-le !!