最近问题总结

2022-11-10  本文已影响0人  学无止境的cy

1.okhttp3请求头的问题

在最近收集的日志发现这个异常:Java.lang.IllegalArgumentException:Unexpected char 0x4e2d at 0 in wifi value:
可以定位到是请求的头部key为wifi的这个字段出了问题,而且基本可以判断成编码问题。再去看下okhttp3这个包里的header类发现了这个方法

  private void checkNameAndValue(String name, String value) {
      if (name == null) throw new NullPointerException("name == null");
      if (name.isEmpty()) throw new IllegalArgumentException("name is empty");
      for (int i = 0, length = name.length(); i < length; i++) {
        char c = name.charAt(i);
        if (c <= '\u0020' || c >= '\u007f') {
          throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in header name: %s", (int) c, i, name));
        }
      }
      if (value == null) throw new NullPointerException("value for name " + name + " == null");
      for (int i = 0, length = value.length(); i < length; i++) {
        char c = value.charAt(i);
        if ((c <= '\u001f' && c != '\t') || c >= '\u007f') {
          throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in %s value: %s", (int) c, i, name, value));
        }
      }

可以看到在请求之前会检查一遍header中的name和value,其中name只支持大于'\u001f'或者小于'\u007f'的字符。

解决方法:和后台约定好统一的转码方式进行转码就好了。

2.ArrayList和LinkedList在不同手机的顺序问题

由于我们app和后台接口都是加密传输的,解密的key是和发送的内容是相关的。有天后台反馈有的用户的某些接口无法解密。由于我们对塞入的数据顺序是有严格要求的,结合我几年碰到一个问题,在某些手机上Arraylist确实和常规手机上的输出顺序是不同的,改完linkedlist就好了,具体原因后面有空会继续研究并更新

3. A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable

com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store
网上看了一大堆什么删除debug文件都不行,同一套代码更换了android studio版本就不行了,简单粗暴的办法直接升级项目当前的jdk版本 只要11及以上就行了,在setting->gradle->gradle JDK指定JDK版本就好了

上一篇下一篇

猜你喜欢

热点阅读