这是我参与「第四届青训营」笔记创作活动的第11天。
本篇笔记记录项目实践中遇到的问题。
1、创建项目,使用navigation + Fragment布局,运行时发现navigation下方有多余空白
反复查找没有找到这部分空白的来源,后来发现activity_main.xml里面有android:paddingTop属性,将该属性删除,问题解决。
2、Gson解析与Kotlin空安全
项目使用了Gson做Json解析,项目使用RecyclerView做列表,适配器设置各字段均为非空类型。但程序运行时却崩溃,查看异常信息发现是空指针异常。进一步调查接口返回部分字段有时返回为null,此时会导致空指针异常。
解决:暂时简单将adapter的data class有可能为空的字段设置为可空类型。
尽管问题暂时解决,但对问题发生的原因较为疑惑,进一步了解问题原因及更高级的解决方法,可参阅juejin.cn/post/699548…及链接文章文末的参考文章,这几篇文章对原理有详细描述,并给出了解决办法。
3、OkHttp在OnResponse中拿到的数据无法赋值给本地变量,在OnResponse外变量仍然为null
这一问题是因为OkHttp是异步执行的。项目实践中使用了传参的方法简单地解决了这个问题,其他处理异步请求的方法也适用,比如回调。
4、字符串拼接出现警告
字符串拼接时,警告Do not concatenate test displayed with setText. Use resource string with placeholders.
解决:这个警告的含义是,通过setText设置文本时不推荐使用字符串拼接的方式。在res/string.xml里将所需字符串以资源形式存储,同时以占位符的方式表示此处应为占位的内容,如%s表示字符串。详情请参考Android官方文档:developer.android.com/guide/topic…
5、List toString()出现[]
解决:利用TextUtils.join()来代替。第一个参数是分隔符,第二个参数是该List。
6、利用Android Studio Push到GitHub停留在Pushing…一直不结束
观察控制台发现已经报错Invocation failed:Unexpected end of file from serverjava.lang.RuntimeException。检查非网络问题,随后确认账号认证问题。
利用 git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git重新设置Token,再次尝试push操作,问题解决。