2017-04-14 55 views
1

我有我的APP和c#web API,应用程序使用retrofit2调用。我在对api进行post调用时遇到问题,调用中的参数名称将更改为“a”和“b”,而不是实际名称。签名的apk更改帖子参数名称

ApiInterface:

@POST("users/add") 
Call<String> createUser(@Body UserSignUpModel user); 

设置改造:

Gson gson = new GsonBuilder() 
        .setLenient() 
        .create(); 
retrofit = new Retrofit.Builder() 
        .baseUrl(Configuration.API_URL) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .client(get_HTTPClient()) 
        .build(); 

UserSignupModel:

public class UserSignUpModel 
{ 
    public String UserName; 
    public long PhoneNumber; 
} 

发出请求:

userSignUpModel.UserName = userName.getText().toString(); 
userSignUpModel.PhoneNumber = Long.parseLong(number.getText().toString()); 
Client.createUser(userSignUpModel, callback); 

我还设置小提琴手拦截我是从我的应用程序获取请求及以下结果:
1.当我点击调试或在Android Studio中运行
While debug or run
2.当我从它
While executing signed apk


我的请求是因为这个失败生成一个签名的apk,并请求。任何帮助将不胜感激。
谢谢。

回答

0

生成签名的.apk将触发proguard(如果已启用)。这会混淆类和类。

有2种方式如何修复这种情况下:

选项1:使用@SerializedName

改变你UserSignUpModel.java,明确地指出变量的名称:

import com.google.gson.annotations.SerializedName; 

public class UserSignUpModel 
{ 
    @SerializedName("UserName") 
    public String UserName; 
    @SerializedName("PhoneNumber") 
    public long PhoneNumber; 
} 

选项2:更改proguard-rules.pro文件

添加以下规则来你proguard-rules.pro文件,假设UserSignUpModel.java是模型包内:

-keep class com.<packageName>.model.** { *; }