android - 如何调试我的改造 API 调用?

我正在使用改造从 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与改造一起。

如果这有帮助,请将其添加到您的 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 类中添加这个 -

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 代码

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

您将能够记录您进行的改造网络调用。

如果您需要更多信息,请告诉我。

https://stackoverflow.com/questions/45646188/

相关文章:

javascript - 定义 "cyclic data structures"

java - 如何使用 Java 和 Jackson 库对 Json 字符串进行多态反序列化?

python - 如何以人类可读的格式序列化 Python 对象?

ios - 将 iOS objective-c 对象转换为 JSON 字符串

java - 没有很多类的 GSON 解析

php - 如何在 symfony 中返回 json 编码格式错误

xml - CSV、JSON 和 XML 对于 REST API 的相对优点是什么?

Java - 嵌套在嵌套中的 Gson 解析

json - 将参数传递给 jq 过滤器

java - 为什么 Json 测试程序不起作用?