java - Android Retrofit GET 调用响应为 NULL

标签 java android http retrofit2

嗨,我在过去 8 到 9 小时内一直在 google 上搜索这个问题。实际上我无法找到我在这里犯的错误是什么。

我有两个网络调用。一是登录。它运行良好。我正在使用改造。

但是我还有另一个网络调用。它没有按预期工作。我通过我的代码得到的响应为空,我在 chrome 中执行调用,我得到了响应。下面是我的代码。请帮助我哪里做错了。

构建梯度

//retrofit for networkcall
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1'
implementation 'com.google.code.gson:gson:2.8.6'

ApiClient.java

public class ApiClient {
    private static final String BASE_URL = Constants.BASE_URL;
    private static Retrofit retrofit = null;


    public static Retrofit getClient() {
        //OkHttpClient client = new OkHttpClient();
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }

}

ApiInterface.java

public interface ApiInterface {
    @FormUrlEncoded
    @POST(Constants.TOKEN_URL)
    Call<Token> getToken(@Field("username") String username, @Field("password") String password, @Field("grant_type") String grant_type);

    @GET(Constants.GET_VEHICLE_BRAND_COUN_TLIST_URL) // here is method i am trying to call in my activity class.
    Call<JSONArray> getVehicleBrandCountList();
}

MainActivity.java

private void getLoggedInUserData( String bearerToken) {
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
    Call<JSONArray> call = apiService.getVehicleBrandCountList();
    call.enqueue(new Callback<JSONArray>() {
        @Override
        public void onResponse(Call<JSONArray> call, Response<JSONArray> response) {
            try{
                Log.e("body---",response.body().toString());
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(Call<JSONArray> call, Throwable t) {
            Log.e(this + "-----", t.toString());
        }
    });
}

最佳答案

我使用浏览器测试了图像中的端点,它似乎发回了 XML 响应而不是 JSON。但从 Postman(测试 API 调用的软件)来看,它似乎可以向您发送 JSON 格式的响应。

尝试在 GET 调用中添加“Accept” header ,以指示您希望接收响应的格式。

 @Headers({"Accept: application/json"})
 @GET(Constants.GET_VEHICLE_BRAND_COUN_TLIST_URL) // here is method i am trying to call in my activity class.
    Call<JSONArray> getVehicleBrandCountList();
}

关于java - Android Retrofit GET 调用响应为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61918620/

相关文章:

java - 从 IBM MQQueue 中删除消息

android - Crashlytics 找不到我的 Fabric.properties

c# - webclient 和 expect100continue

http - 使用 url-retrieve 解码 gzip-ed 响应主体

java - Groovy 的 Java HTTPBuilder?

java - 如何与 firestore 分开读取集合

java - 更改 rgb 颜色值以表示一个值

java.sql.SQLException : No Suitable Driver error in android app that interacts with postgres 异常

android - 为 ListView 禁用双击

javascript - 如何使 html5 文本字段显示数字键盘?