2017-04-14 87 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.** { *; }