2

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

接口接口:

@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();

用户注册模型:

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 上运行时 2. 当我生成签名的 apk 并从中发出请求时
调试或运行时

在执行签名的 apk 时


我的请求因此而失败。任何帮助将不胜感激。
谢谢你。

4

1 回答 1

2

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

有两种方法可以解决这种情况:

选项 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.** { *; }
于 2017-04-14T18:24:25.890 回答