You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:25:47