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

Android Retrofit POST请求返回200 OK但数据未上传至服务器求助

问题排查与解决方案

刚看了你的代码,发现几个很关键的问题,这大概率就是数据没上传成功的原因,咱们一步步来解决:

1. 字段参数名带多余空格,导致服务器无法识别

你的Post接口里,status字段的定义多了个空格:

@Field("status ") String status

服务器端的参数名肯定是status(不带空格),这个多余的空格会让服务器完全识别不到这个参数,直接忽略它。赶紧把空格去掉,改成:

@Field("status") String status

2. 参数类型完全不匹配

接口里name字段的类型定义错了:

@Field("name") Boolean name

但你在MainActivity里传入的是user.getName()——这个值是来自EditText的字符串输入啊!布尔类型和字符串类型不匹配,服务器根本接收不到正确的name值,甚至可能直接丢弃整个请求的有效数据。你需要把接口里的name类型改成String:

@Field("name") String name

3. 建议添加日志拦截器,直观查看请求内容

为了确认请求到底发送了什么参数,建议给Retrofit加上OkHttp的日志拦截器,这样能看到完整的请求体、参数、响应内容,排查问题更高效。

添加步骤:

  • 先在build.gradle里添加依赖:
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
  • 然后创建Retrofit的时候配置这个拦截器:
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(logging)
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(APIUrl.BASE_URL)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

这样Logcat里会打印出完整的请求参数,你可以清晰确认所有字段是不是都正确发送了。

4. 同步检查服务器端的参数接收逻辑

虽然返回了200 OK,但服务器可能只是返回了成功状态码,实际因为参数缺失/不匹配没执行入库逻辑。你可以用Postman直接调用app_register.php接口,传入正确的参数,看看能不能成功入库,先排除服务器端的问题。

补充小细节

  • 可以在userSignUp方法开头加个非空判断,避免EditText输入为空时传入无效参数;
  • 确认Registrationstatus类的字段和接口参数的命名完全对应,避免拼写错误。

按照上面的步骤修改后,应该就能解决数据没上传的问题了!

内容的提问来源于stack exchange,提问作者anil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:16