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

为何出现I/system_server日志且Kotlin+Retrofit无法调用API请求?

问题根因排查及解决方法

前置说明

日志I/system_server: oneway function results will be dropped but finished with status OK and parcel size 4属于系统层面的通用日志,和你的App网络请求失败无关联,无需针对该日志做排查。

最高概率故障点及修复方案

    1. CompositeDisposable未初始化
      你的代码中使用myCompositeDisposable?.add添加RxJava订阅,存在可空调用符?,若myCompositeDisposable没有提前初始化,订阅代码会直接跳过,既不会发起请求,也不会触发任何回调。
      修复方案:在页面对应生命周期(如onCreate/onViewCreated)中添加初始化代码:
    myCompositeDisposable = CompositeDisposable()
    

    页面销毁时记得调用myCompositeDisposable?.dispose()释放资源。

    1. 参数类型不匹配
      addUser方法传入的参数是UserDataObject类型,但Retrofit接口定义中@Body接收的是UserDataClass类型,若两个类型结构不兼容,Gson序列化会直接失败且不会触发你定义的错误回调。
      修复方案:将接口定义调整为参数类型匹配:
    @POST("/api/some/API/URL")
    fun addUser(@Body user: UserDataObject) : Completable
    
    1. BASE_URL配置错误
      Retrofit要求BASE_URL必须以斜杠/结尾,否则接口路径拼接会出错;如果是局域网测试,还要确保手机和API服务器在同一个网段,且端口、IP配置正确。
      修复方案:校验BASE_URL格式,示例正确格式:http://192.168.31.2:8080/

辅助排查手段

添加OkHttp日志拦截器,直观查看请求是否发出、参数是否正确:

  1. 先添加依赖到模块级build.gradle:
implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
  1. 调整OkHttpClient配置:
val loggingInterceptor = HttpLoggingInterceptor().apply {
    level = HttpLoggingInterceptor.Level.BODY
}
val client = OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .addInterceptor(BasicAuthInterceptor("admin", "admin"))
    .build()

配置完成后运行App,查看Logcat中Tag为OkHttp的日志,即可确认请求的完整链路信息。

SELinux权限问题排查

如果上述所有代码问题都已排除,再验证SELinux权限问题:

  • 调试阶段可通过adb命令临时关闭SELinux校验:adb shell setenforce 0,执行后再测试请求是否正常
  • 若关闭SELinux后请求恢复正常,可根据SELinux的具体报错日志添加对应权限规则,普通应用开发场景极少碰到该类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:39:04