Android改造POSTAPI调用替换字符串值

Android Retrofit POST API call replace string value

我正在使用改造 2.1.0

  compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

在API界面中,

  @FormUrlEncoded
@POST("employeerest")
Call<EmployeeInfo> getEmployeeInfo(@Field("ActivationCode") String strActivationCode,
                                   @Field("Data") String strjsonData);

问题是改造更改 strjsonData.

的字符串值

Actual value is : ODk0MTUxODc3ODk2ODI2OURs2YIUf6zveGI5P+bQR4phRk34OdAxZTuOI97tgzDekU7jTWfVAqjEex8zHn9xgOA1UxA3CCV7VXmAzrU1z4T5PyS+czPKCAd2HbdsNdvorHBQEZwjpADdbVY1M5xPrNWb3L910MuHjex6NSVoFFdxn3fAlwRtYQbseHS3GZCIssyv4g==

While Retrofit replace its value to : ODk0MTUxODc3ODk2ODI2OURs2YIUf6zveGI5P%2BbQR4phRk34OdAxZTuOI97tgzDekU7jTWfVAqjE%0Aex8zHn9xgOA1UxA3CCV7VXmAzrU1z4T5PyS%2BczPKCAd2HbdsNdvorHBQEZwjpADdbVY1M5xPrNWb%0A3L910MuHjex6NSVoFFdxn3fAlwRtYQbseHS3GZCIssyv4g%3D%3D%0A

谁能告诉我哪里错了?请帮助我..提前致谢。

@FormUrlEncoded 注释指示 Retrofit 对参数进行 UrlEncode。删除它,它应该传递不变的值

只需删除此 @FormUrlEncoded 就可以了

你应该参考这个link它会有帮助

https://futurestud.io/tutorials/retrofit-send-data-form-urlencoded-using-fieldmap

使用@Fieldmap

终于解决问题了

从我这边创建名称值对列表,而不是 Retrofitside 并发送它。

   List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
    nameValuePair.add(new BasicNameValuePair("ActivationCode",
            strActivationCode));
    nameValuePair.add(new BasicNameValuePair("Data", base64));

    Call<EmployeeInfo> call = null;
    try {
        call = NetworkConstants.getNetworkObject().loginUser(getQuery(nameValuePair));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

private String getQuery(List<NameValuePair> params)
        throws UnsupportedEncodingException {
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (NameValuePair pair : params) {
        if (first) {
            first = false;
        } else {
            result.append("&");
        }

        result.append(pair.getName());
        result.append("=");
        result.append(pair.getValue());
    }

    return result.toString();
}

并在界面中

 @POST("myapi")
Call<EmployeeInfo> loginUser(@Body String body);

所以它不会替换字符串。