retrofit API 콜을 디버깅하려면 어떻게 해야 하나요?
Flickr api에서 데이터를 얻기 위해 retrofit을 사용하고 있습니다.전화를 거는 방법은 다음과 같습니다.
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()
에서 반환되는 URL을 입력하려고 하면call.request().url().toString()
브라우저에서는 정상적으로 동작해, 기대했던 JSON을 얻을 수 있습니다.왜 나의enqueue()
방법은 발사되지 않는가?
도와주셔서 감사합니다!
이것이 도움이 된다면, 이것을 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'
사용자 내부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;
}
}
코틀린 코드
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)
}
또한 Retrofit Network 콜을 기록할 수 있습니다.
더 필요한 정보가 있으면 알려주세요.
HTTP 요구 및 응답 데이터를 기록하는 OkHttp 인터셉터.
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(Level.BASIC);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
로그 레벨은 언제든지 변경할 수 있습니다.setLevel
.
NONE, BASIC, HEADERS, BODY의 4가지 레벨이 있습니다.
커스텀 로케이션에 로그하려면Logger
인스턴스(instance)를 설정합니다.
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new
Logger() {
@Override public void log(String message) {
Log.d(TAG, "message: ");
}
});
그래들부터
compile 'com.squareup.okhttp3:logging-interceptor:(insert latest version)'
이 레퍼런스에 따라 주세요.
편집: 이 라이브러리는 구조도 좋고 통나무도 깨끗합니다.먹어봐!!
다음 클래스를 사용하여 API 호출을 기록할 수 있습니다.
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
object HTTPLogger {
fun getLogger(): OkHttpClient {
/*
* OKHTTP interceptor to log all API calls
*/
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.addInterceptor(interceptor)
.build()
return client
}
}
그런 다음 이렇게 개조 인스턴스 클래스에서 이 클래스를 호출할 수 있습니다.
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClientInstance {
private var retrofit: Retrofit? = null
val retrofitInstance: Retrofit?
get() {
if (retrofit == null) {
retrofit = Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(HTTPLogger.getLogger())
.build()
}
return retrofit
}
}
필요한 의존관계는 다음과 같습니다.
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
언급URL : https://stackoverflow.com/questions/45646188/how-can-i-debug-my-retrofit-api-call
'programing' 카테고리의 다른 글
sqldeveloper의 insert 문장에서 BLOB 열에 삽입하려면 어떻게 해야 합니까? (0) | 2023.03.15 |
---|---|
UI 그리드 기호 문제 (0) | 2023.03.15 |
중첩된 JSON 개체 표시 해제 (0) | 2023.03.15 |
React.js의 부트스트랩모달 (0) | 2023.03.15 |
리액트 후크 : 하위 컴포넌트에서 상위 컴포넌트로 데이터를 전송합니다. (0) | 2023.03.15 |