Android Studio中Retrofit2 POST请求失败无日志,求排查
问题排查与解决方案
1. 先补全错误日志输出
你当前的onFailure方法没有打印任何错误详情,根本没法定位问题,先修改这段代码:
override fun onFailure(call: Call<Response>, t: Throwable) { textView.text = "Fail!" Log.e("RetrofitError", "请求失败原因: ${t.message}", t) }
修改后Logcat会输出完整的异常堆栈信息,帮你精准定位问题。
2. 替换localhost为正确地址
Android模拟器里的localhost指向模拟器自身,而你的NestJS服务运行在电脑本地,必须替换地址:
- 用Android Studio自带模拟器的话,把
baseUrl改成http://10.0.2.2:3000/ - 用真机或第三方模拟器(雷电、蓝叠等),改成你电脑的局域网IP(比如
http://192.168.1.105:3000/)
修改ServiceBuilder中的baseUrl:
private val retrofit = Retrofit.Builder() .baseUrl("http://10.0.2.2:3000/") // 替换为对应地址 .addConverterFactory(GsonConverterFactory.create()) .client(client) .build()
3. 将Response类改为data class
Gson解析需要类具备正确的字段映射和构造逻辑,你当前的Response是普通类,改成data class才能让Gson正常解析返回的JSON:
data class Response ( val cso: String )
4. 检查网络权限是否添加
在AndroidManifest.xml里确认有没有添加INTERNET权限,没有的话补上:
<uses-permission android:name="android.permission.INTERNET" />
5. 额外校验:请求参数与后端匹配
Postman测试正常的话,确认RequestModel的字段名和后端接口接收的参数名完全一致。如果后端接收的参数名和username不一致,需要用@SerializedName注解指定映射:
import com.google.gson.annotations.SerializedName data class RequestModel( @SerializedName("后端接收的参数名") val username: String )
完成以上修改后重新运行应用,查看Logcat的错误日志,若还有问题可根据日志进一步排查。
内容的提问来源于stack exchange,提问作者Almaszosz
相关产品推荐
相关产品推荐

