Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I debug my retrofit API call?

I'm using retrofit to get some data from the Flickr api. The method I'm making the call in looks like this:

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; } 

However it is never getting into the onResponse() method. The first log statement within onResponse() never prints, neither does the log statement in onFailure(). When I try entering the URL that is returned by call.request().url().toString() in the browser it works fine, and I get the expected JSON. Why is my enqueue() method never firing?

Thanks for any help!

like image 515
intA Avatar asked Aug 12 '17 03:08

intA


People also ask

How do I see retrofit responses on Android?

Step 1 : create Rest Interface like below attached find it(watch only). Step 2 : create MainActivity like below attached find it. Step 3: create gradle add it and (Sync) it. Step 4 : create pojo classes using json example as shown below.

Is retrofit a REST API?

Retrofit is a REST Client for Java and Android allowing to retrieve and upload JSON (or other structured data) via a REST based You can configure which converters are used for the data serialization, example GSON for JSON.


Video Answer


1 Answers

Use HttpLoggingInterceptor along with Retrofit.

If this helps, add this inside your build.gradle -

//Retrofit and OkHttp for Networking implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' //Logging Network Calls implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' 

Inside your APIClient class add this -

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;     } } 

Kotlin Code

val interceptor : HttpLoggingInterceptor = HttpLoggingInterceptor().apply {             level = HttpLoggingInterceptor.Level.BODY         }  val client : OkHttpClient = OkHttpClient.Builder().apply {             addInterceptor(interceptor)         }.build()   fun getService(): Service {         return Retrofit.Builder()                 .baseUrl(BASE_URL)                 .addConverterFactory(GsonConverterFactory.create())                 .addCallAdapterFactory(LiveDataCallAdapterFactory())                 .client(client)                 .build()                 .create(Service::class.java)     } 

And you will be able to log the Retrofit Network calls that you make.

Let me know if you need more information.

like image 133
hsm59 Avatar answered Oct 02 '22 17:10

hsm59