2019年12月工作整理

1202

关于compileDebugJavaWithJavac的错误信息

可以使用下面的命令查看具体的错误信息

gradlew compileDebugSources --stacktrace -info

关于TextView设置ClickableSpan

点击结尾空白位置也响应点击的问题

项目中需要在一段文字的最后两个字加点击事件,正常设置之后发现点击结尾空白的位置也会响应点击事件。明明已经设置了点击区间。

解决方法:在后边紧接着追加一个0宽度字

builder.append("\u200b");

或者直接在文字后面添加。参考文档

点击有点击事件的文字出现下面的背景色

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5Ho7jek-1578121774004)在这里插入图片描述
很丑,如何修改呢?

这里就需要用到TextView的setHighlightColor属性,Android4.0以上默认是淡绿色,低版本的是黄色。
我们需要通过这个方法重新设置背景色。

1203

ClickableSpan 引起的内存泄漏

项目中接入leakcanary后,今天早上发现一条内存泄漏由ClickableSpan引起的,百度之后果然有人和遇到同样的问题,这里记录一下。


解决方法:参考文献

1204

android富文本 加载带图片的html

  • https://blog.csdn.net/soullines/article/details/75669585

1205

骨架屏

即表示在页面完全渲染完成之前,用户会看到一个占位的样式,用以描绘了当前页面的大致框架,加载完成后,最终骨架屏中各个占位部分将被真实的数据替换。
在这里插入图片描述

骨架屏(Skeleton Screen)在Android中的应用

1209

Dialog弹出状态栏变黑的问题

项目中底部回复框,用的是DialogFragment,设置了Window的高度为WindowManager.LayoutParams.MATCH_PARENT的时候,当dialog弹出的时候,状态栏为变色黑色的(设置成固定高度的时候,并不会变黑)


解决办法:手动设置状态栏为透明状态

// 设置宽度为屏宽, 靠近屏幕底部。
Window window = getDialog().getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
// 设置状态栏为透明色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
lp.gravity = Gravity.BOTTOM;
lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
// WindowManager.LayoutParams.MATCH_PARENT换成固定高度不会出现黑色状态栏
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(lp);

1210

常用转义符

空格    
< 小于号 &lt; &#60;
> 大于号 &gt; &#62;
& 与号 &amp; &#38;
” 引号 &quot; &#34;
‘ 撇号 &apos; &#39;
× 乘号 &times; &#215;
÷ 除号 &divide; &#247;

1211

databinding 中字符串拼接的问题

databinding里面的拼接不能像下面这样

android:text='@{"username:"+bean.name}' 

这样编译的时候会报错
正确的写法是下面这样

android:text='@{@string/user_name+bean.name}'  

需采用 @string/xxxx的形式进行字符串的拼接

1213

AndResGuard压缩会影响性能吗

resources.arsc压缩会影响性能吗
AndResGuard is promoting some bad practices

1218

RecyclerView 设置分割线

RecyclerView 增加了设置分割新的类

androidx.recyclerview.widget.DividerItemDecoration

1220

com.google.gson Gson 解析时报错: declares multiple JSON fields named XXX

报错内容如下:

java.lang.IllegalArgumentException: class com.caiyu.m_home.entity.allreply.ReplyListEntity declares multiple JSON fields named viewModel

原因是:子类和父类有相同的字段属性。
解决办法:

  • (1)将父类中的该字段去掉(不要),或者在需要打印的字段上加上注解@Expose
  • (2):由于我报错的类都是在jar包里面,所以第一种方法不好使。只好采用其他日志输出的方法-- com.alibaba.fastjson.JSON.toJson();

1225

使用GSON 转换的时候报下面的错误

  • Unable to create converter for xxx
  • Attempt to invoke virtual method ‘java.lang.reflect.Method java.lang.Class.getMethod(java.lang.String, java.lang.Class[])’
  • Can not make a java.lang.reflect.Method constructor accessible

错误产生的原因,是在用Gson转换javaBean的时候,在类文件中存在有类型为java.lang.reflect.Method的字段的类型,所以报以上错误。检查确实是的,在该字段前面加上transient标记就可以了。

不过这个问题貌似在Android 9.0以上不会报,是在8.0上测试出来的。

1230

Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 19

在这里插入图片描述
今早将项目在Android 4.4 手机上跑了一下,直接崩溃了,看到如上log信息,应该是版本问题,看了okhttp的官方介绍最新版的okhttp已经放弃4.4手机了
在这里插入图片描述

由于前几天将Retrofit的版本升到2.7,内置的okhttp最低支持5.0,现在要么放弃4.4的用户,用么将Retrofit的版本降到2.5可以解决问题。

1231

retrofit上传附件时候文件名是中文问题

Unexpected char 0x65b0 at 34 in Content-Disposition value: form-data; name=“file”;

测试人员在上传图片的时候,选择了一张中文命名的图片文件,导致程序崩溃。

okhttp3.Headers里面做了校验

static void checkName(String name) {
    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));
      }
    }
  }

网上解决方案:

  • URLEncoder.encode(file.getName(),“UTF-8”);//App传递给后台时候编码
  • URLDecoder.decode(ss,“UTF-8”);//后台接到时候进行转码

我的解决方案是检查是否含有中文,然后重命名文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltym2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值