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!
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With