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
相关产品推荐
相关产品推荐

