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);
所以它不会替换字符串。
我正在使用改造 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);
所以它不会替换字符串。