Android 为什么翻新@Path不替换?

Android 为什么翻新@Path不替换?,android,retrofit,Android,Retrofit,我有一个大项目,它使用的是翻新2.0 beta2,但它似乎是@Path被打破了 这是接收请求时服务器端的日志:/group/%7Bid%7D/用户 “{}”被标识为编码值,而不是用实际值替换它 我试图创建一个测试项目,它似乎在工作,但当我在大项目中尝试相同的代码时,它崩溃了!原因可能是什么?这是一个问题吗 这是我测试的简单接口 @GET("/group/{id}/users") Call<Object> groupList(@Path("id") int groupId); Ret

我有一个大项目,它使用的是翻新2.0 beta2,但它似乎是@Path被打破了

这是接收请求时服务器端的日志:/group/%7Bid%7D/用户 “{}”被标识为编码值,而不是用实际值替换它

我试图创建一个测试项目,它似乎在工作,但当我在大项目中尝试相同的代码时,它崩溃了!原因可能是什么?这是一个问题吗

这是我测试的简单接口

@GET("/group/{id}/users")
Call<Object> groupList(@Path("id") int groupId);

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://1.1.1.1:5050")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
RetrofitConfigurationService2 service = retrofit.create(RetrofitConfigurationService2.class);
    service.groupList(12).enqueue(new Callback<Object>() {
        @Override
        public void onResponse(Response<Object> response, Retrofit retrofit) {

        }

        @Override
        public void onFailure(Throwable t) {

        }
    });
@GET(“/group/{id}/users”)
调用groupList(@Path(“id”)intgroupid);
改装改装=新改装.Builder()
.baseUrl(“http://1.1.1.1:5050")
.addConverterFactory(GsonConverterFactory.create())
.build();
改装配置服务2服务=改装.create(改装配置服务2.class);
service.groupList(12).enqueue(新回调(){
@凌驾
公共响应(响应、改装){
}
@凌驾
失效时的公共无效(可丢弃的t){
}
});

谢谢

现在请尝试阅读此博客:

改进2.0带来了新的URL解析概念。基本URL和@URL 不仅仅是简单地结合在一起,而是解决了 与实际情况相同

作者的结论是:

  • 基本URL:始终以结尾/

  • @Url:不要以开头/

如果在项目中使用Proguard,请在配置中添加以下行:

-dontwarn改装**

-保持类更新。**{*;}

-保留署名

-保留特例


现在请尝试阅读此博客:

改进2.0带来了新的URL解析概念。基本URL和@URL 不仅仅是简单地结合在一起,而是解决了 与实际情况相同

作者的结论是:

  • 基本URL:始终以结尾/

  • @Url:不要以开头/

如果在项目中使用Proguard,请在配置中添加以下行:

-dontwarn改装**

-保持类更新。**{*;}

-保留署名

-保留特例


答案是-keepinterface com.yourInterface.*{*;}
在proguard文件中。

答案是-keepinterface com.yourInterface.*{*;}
在proguard文件中。

我遇到了完全相同的问题。 更通用的解决方案是将以下内容添加到proguard规则中

 -keepclasseswithmembers class * {
     @retrofit2.http.* <methods>;
 }
-keepclassswithmembers类*{
@2.http.*;
}
有关追溯的完整规则:

-keepattributes Signature
-keepattributes Exceptions
-dontnote okhttp3.**, retrofit2.**
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepclasseswithmembers class * {
     @retrofit2.http.* <methods>;
 }
-keepattributes签名
-保留特例
-请勿说明okhttp3.*,改装2**
-dontwarn 2**
-保持类2.*{*;}
-keepclassswithmembers类*{
@2.http.*;
}

我遇到了完全相同的问题。 更通用的解决方案是将以下内容添加到proguard规则中

 -keepclasseswithmembers class * {
     @retrofit2.http.* <methods>;
 }
-keepclassswithmembers类*{
@2.http.*;
}
有关追溯的完整规则:

-keepattributes Signature
-keepattributes Exceptions
-dontnote okhttp3.**, retrofit2.**
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepclasseswithmembers class * {
     @retrofit2.http.* <methods>;
 }
-keepattributes签名
-保留特例
-请勿说明okhttp3.*,改装2**
-dontwarn 2**
-保持类2.*{*;}
-keepclassswithmembers类*{
@2.http.*;
}

您读过描述了吗?我创建了一个测试项目,效果很好。同样的代码在另一个大项目中不起作用。您添加字符串:-dontwarn Reformation.*-keep class Reformation.*{*}-keepattributes Signature-keepattributes Exception到您的proguard规则中?我怀疑问题可能与proguard有关,将尝试让您知道是的,可能是proguard,因为改型使用反射工作。我很乐意帮助你们,不幸的是禁用proguard和multidex似乎不起作用!!!这个问题现在快把我累死了:(你读过描述了吗?我创建了一个测试项目,效果很好。同样的代码在另一个大项目中不起作用。你添加了字符串:-dontwarn-reformation.*.*-keep-class-reformation.*{*}-keepattributes Signature-keepattributes例外进入您的proguard规则?我怀疑问题可能与proguard有关,将尝试让您知道是的,可能是proguard,因为使用反射进行改装。我很乐意帮助您好,不幸的是禁用proguard和multidex似乎不起作用!!!这个问题正在折磨我:(这解决了问题,否则当您使用Proguard时,@Path标记不会保留在apk中。谢谢!这解决了问题,否则当您使用Proguard时,@Path标记不会保留在apk中。谢谢!