Flickr APIからデータを取得するために、レトロフィットを使用しています。呼び出しを行うメソッドは次のようになります。
_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;
}
_
ただし、onResponse()
メソッドには決して入りません。 onResponse()
内の最初のログステートメントは出力されず、onFailure()
内のログステートメントも出力されません。ブラウザでcall.request().url().toString()
によって返されたURLを入力しようとすると、正常に機能し、予想されるJSONを取得します。 enqueue()
メソッドが起動しないのはなぜですか?
助けてくれてありがとう!
HttpLoggingInterceptor をRetrofitとともに使用します。
これが役立つ場合は、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'
APIClient class
これを追加 -
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 {
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)
}
また、作成したRetrofit Networkの呼び出しを記録できます。
さらに情報が必要な場合はお知らせください。
HTTP要求および応答データを記録するOkHttpインターセプター。
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(Level.BASIC);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
setLevel
を呼び出すことにより、いつでもログレベルを変更できます。
4つのレベルがあります:NONE、BASIC、HEADERS、BODY
カスタムの場所にログを記録するには、Logger
インスタンスをコンストラクターに渡します。
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new
Logger() {
@Override public void log(String message) {
Log.d(TAG, "message: ");
}
});
Gradleから
compile 'com.squareup.okhttp3:logging-interceptor:(insert latest version)'
これに従ってください 参照
編集: このライブラリ も見つけました。これは非常に素晴らしい構造ときれいなログを持っています。それを試してみてください!!