欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2019年12月工作整理

程序员文章站 2022-05-02 20:21:33
...

1202

关于compileDebugJavaWithJavac的错误信息

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

gradlew compileDebugSources --stacktrace -info

关于TextView设置ClickableSpan

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

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

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

builder.append("\u200b");

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5Ho7jek-1578121774004)2019年12月工作整理
很丑,如何修改呢?

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

1203

ClickableSpan 引起的内存泄漏

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


解决方法:参考文献

1204

android富文本 加载带图片的html

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

1205

骨架屏

即表示在页面完全渲染完成之前,用户会看到一个占位的样式,用以描绘了当前页面的大致框架,加载完成后,最终骨架屏中各个占位部分将被真实的数据替换。
2019年12月工作整理

骨架屏(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

2019年12月工作整理
今早将项目在Android 4.4 手机上跑了一下,直接崩溃了,看到如上log信息,应该是版本问题,看了okhttp的官方介绍最新版的okhttp已经放弃4.4手机了
2019年12月工作整理

由于前几天将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”);//后台接到时候进行转码

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

相关标签: 月度工作总结