Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.IllegalArgumentException:Log标记";okhttp3.mockwebserver.mockwebserver";超过23个字符的限制_Java_Android_Kotlin_Okhttp_Mockwebserver - Fatal编程技术网

java.lang.IllegalArgumentException:Log标记";okhttp3.mockwebserver.mockwebserver";超过23个字符的限制

java.lang.IllegalArgumentException:Log标记";okhttp3.mockwebserver.mockwebserver";超过23个字符的限制,java,android,kotlin,okhttp,mockwebserver,Java,Android,Kotlin,Okhttp,Mockwebserver,有几点需要澄清,这不是一个重复的问题,因为有人建议: 这是由长日志标记名引起的“运行时崩溃”。i、 e.okhttp3.mockwebserver.mockwebserver,这不是IDE lint错误 此崩溃是由第三方依赖项(即MockWebServer)引起的。多亏了你养了一只虫子 我已经在回答中提供了我的解决方案 原始问题: 我正在使用Expresso和MockWebServer进行Android web服务测试,但是我遇到以下异常,它告诉我日志标记问题: “okhttp3.moc

有几点需要澄清,这不是一个重复的问题,因为有人建议:

  • 这是由长日志标记名引起的“运行时崩溃”。i、 e.
    okhttp3.mockwebserver.mockwebserver
    ,这不是IDE lint错误
  • 此崩溃是由第三方依赖项(即MockWebServer)引起的。多亏了你养了一只虫子
  • 我已经在回答中提供了我的解决方案

原始问题:

我正在使用
Expresso
MockWebServer
进行Android web服务测试,但是我遇到以下异常,它告诉我日志标记问题:

“okhttp3.mockwebserver.mockwebserver”超过了23个字符的限制

详细的堆栈跟踪如下所示:


2020-08-13 11:31:13.277 16901-17085/com.xxx.app I/okhttp.OkHttpClient:这是因为日志API不允许标记超过23个字符

您可以通过以下方式禁用lint检查,但您已收到警告

为了更好地了解,请访问:

在深入研究
MockWebServer.kt
的源代码后,我找到了解决此问题的方法。在该文件中,有一个如下属性:

private val logger=logger.getLogger(MockWebServer::class.java.name)
MockWebServer::class.java.name
将返回完整的类名
okhttp3.MockWebServer.MockWebServer
,显然,作为Android日志标记的名称已经超过23个字符。修复程序正在使用Kotlin反射替换logger属性。反射代码如下:

fun <T : Any> T.setPrivateProperty(variableName: String, data: Any): Any? {
    return javaClass.getDeclaredField(variableName).let { field ->
        field.isAccessible = true
        field.set(this, data)
        return@let field.get(this)
    }
}


MockWebServer::class.java.simpleName
将返回一个较短的类名并修复该问题。

这是否回答了您的问题?我的问题是,
“okhttp3.mockwebserver.mockwebserver”
作为日志标记会导致异常,以及如何解决此问题或任何解决方法?我已经提出,我们已经解决了其他日志名称长度的问题issues@YuriSchimke谢谢这不是lint阶段的问题,这是一个运行时异常,会使测试无法正常执行。