Android中EditText取邮箱@转%40致POST请求异常,求解决方法
解决EditText邮箱@被转成%40导致POST参数失效的问题
嘿,这个坑我之前踩过!其实问题的关键正好是你怀疑的@Field注解配置,咱们一步步拆解解决:
1. 先搞清楚转码的来源
首先要明确:EditText.getText().toString()本身不会自动把@转成%40——这个转码是Retrofit在处理表单请求时默认做的URL编码(对应application/x-www-form-urlencoded格式的要求)。你可以在调用API前先打个日志确认:
String email = editText.getText().toString(); Log.d("EmailCheck", "原始输入值:" + email);
如果日志里显示的是正常的xxx@xxx.com,那问题100%出在Retrofit的字段处理上。
2. 用encoded = true关闭自动编码
Retrofit的@Field注解默认会对字段值做URL编码,这就导致@被转成了%40。要阻止这个行为,只需要给@Field加上encoded = true参数——它告诉Retrofit:“这个字段我已经处理好了,你直接原样发送就行”。
修改后的代码应该是这样:
@FormUrlEncoded @POST("你的登录接口路径") Call<LoginResponse> login( @Field(encoded = true, value = "username") String username, // 其他参数... );
这样发送请求时,邮箱里的@就会保持原样,不会被转成%40了。
3. 额外排查:如果EditText的值本身就不对
要是日志里显示的输入值已经是%40,那就要检查你有没有给EditText设置过输入过滤器,或者在获取值后不小心调用了URLEncoder.encode()这类转码方法——这些操作会提前把@转成%40,这时候得把多余的转码逻辑删掉。
内容的提问来源于stack exchange,提问作者BENN1TH
相关产品推荐
相关产品推荐

