You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit2调用@GET接口报错:No Retrofit annotation found. (parameter #1)

问题排查与解决方案

嘿,我帮你找到了几个可能触发这个IllegalArgumentException的问题,咱们一步步来解决:

1. OkHttp版本不兼容(最核心的原因)

Retrofit 2.x 完全基于 OkHttp 3.x 构建,但你当前的依赖里引入的是 OkHttp 2.7.0(com.squareup.okhttp:okhttp:2.7.0),这种版本不匹配会导致Retrofit内部无法正确识别@Query这类注解,直接抛出参数注解未找到的异常。

修复方案:
删掉旧的OkHttp 2依赖,替换为Retrofit 2.3.0对应的OkHttp 3版本(比如3.8.1),或者干脆不用手动引入OkHttp——Retrofit会自动依赖兼容的OkHttp3版本:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-compat:27.1.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    // 删掉这行:compile 'com.squareup.okhttp:okhttp:2.7.0'
    // 可选:手动引入匹配的OkHttp3版本,或者省略让Retrofit自动处理
    // compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.android.support:support-core-utils:27.1.1'
}

2. Callback泛型缺失(潜在问题)

你在调用enqueue时创建的是new Callback(),但Retrofit 2的Callback必须指定泛型类型,虽然这不是直接引发注解异常的原因,但会导致后续回调里的类型转换错误,建议修正:

result.enqueue(new Callback<Results>() { // 补充泛型<Results>
    @Override
    public void onResponse(Call<Results> call, Response<Results> response) {
        // 建议先判断请求是否成功、响应体是否为空
        if (response.isSuccessful() && response.body() != null) {
            Log.d("data", response.body().toString());
        } else {
            Log.d("data", "请求失败,状态码:" + response.code());
        }
    }

    @Override
    public void onFailure(Call<Results> call, Throwable t) {
        Log.d("data", "请求失败原因:" + t.getMessage());
    }
});

3. 额外检查项

  • 确认@Query注解的包路径是retrofit2.http.Query,如果不小心导入了旧版Retrofit(1.x)的retrofit.http.Query,也会导致注解不被识别。
  • 检查SEARCHPATH的取值是否为有效的相对路径(比如"search"),不要包含baseUrl里的域名部分,否则会导致URL拼接错误。

内容的提问来源于stack exchange,提问作者user3167555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:36:27