RecyclerView adapter 切换不同的数据源,数据异常的问题

 private void bindCourse(View courseView, CourseBean courseBean) {
            ((TextView) courseView.findViewById(R.id.tv_course_name)).setText(courseBean.getCourseName());
            if (TextUtils.isEmpty(courseBean.getCourseName())) {
                return;
            }
            ((TextView) courseView.findViewById(R.id.tv_tch_name)).setText(courseBean.getTeacherName());
            if (TextUtils.isEmpty(courseBean.getClassInfo())) {
                courseView.findViewById(R.id.tv_class_name).setVisibility(View.GONE);
            } else {
                ((TextView) courseView.findViewById(R.id.tv_class_name)).setVisibility(View.VISIBLE);
                ((TextView) courseView.findViewById(R.id.tv_class_name)).setText(courseBean.getClassInfo());
            }
        }

viewholder 绑定item 的代码,里面由于接口的问题,有部分数据课程名称是空的,显示出来非常奇怪,后台不肯改,我也想问数据异常也不改????没办法,自己想办法吧。

当没有课程名称的时候就直接空着那节课吧,但是上面那样写出了一个问题,当我切换数据源的时候,本来应该空着的那节课被填满了。首先想到的就是接口数据问题,后面查了之后发现数据是正常的,马上就想到的是viewholder 的复用问题了,切换数据源了原本第一次加载的viewholder 并没有销毁,里面已经填充了数据,第二次如果没赋值就用了第一次的值了。后面每次绑定都重新赋值就好了

private void bindCourse(View courseView, CourseBean courseBean) {
            ((TextView) courseView.findViewById(R.id.tv_course_name)).setText(courseBean.getCourseName());
            if (TextUtils.isEmpty(courseBean.getCourseName())) {
                ((TextView) courseView.findViewById(R.id.tv_tch_name)).setText("");
                ((TextView) courseView.findViewById(R.id.tv_class_name)).setText("");
                return;
            }
            ((TextView) courseView.findViewById(R.id.tv_tch_name)).setText(courseBean.getTeacherName());
            if (TextUtils.isEmpty(courseBean.getClassInfo())) {
                courseView.findViewById(R.id.tv_class_name).setVisibility(View.GONE);
            } else {
                ((TextView) courseView.findViewById(R.id.tv_class_name)).setVisibility(View.VISIBLE);
                ((TextView) courseView.findViewById(R.id.tv_class_name)).setText(courseBean.getClassInfo());
            }
        }

 不是什么大问题,因为recylerview 没有占满一屏,第一时间然没想到viewholder 的复用,30节课根据x,y 填空花了一些时间对数据!

吐槽一下,发现后台真的很需要实战经验,以前有经验的后台返回的数据是你要什么我给什么,不可能有乱七八糟的数据,现在一两年甚至三年经验的后台,我要的只是三个字段返回我20 个字段,但是还没完全覆盖我那三个字段!接口参数有的多大十几二十个!还有我要的数据一个接口返回结果分两部分,让我自己把两部分逐条比对拼起来的。

不过比起来让我去改后台的bug,这已经不算什么了。现在后台写的代码简直了,只保证有数据显示在界面上,其他数据的正确性,效率等等完全不考虑。

说说我改了十几个java 后台bug的心得,一般就是 sql 语句的获取自己想要的数据,不是很难。但我现在的项目分了好几个module,对内api_service 对外api_service,核心库组件,所有的数据库mapper 放到核心库里面,这样就有一个问题,我加一个接口要改n 个module,当核心组件不满足需求的时候所有的组件都要改!

我感觉后台其实跟android 架构是一样的,基础lib库-》通用业务module===》独立业务module1.。。,所有的mapper 文件应该是属于业务的,不同的业务module 都可以有自己的mapper 文件即便是操作同一张表也不应该提取到通用业务里面,除非需求是完全一摸一样的。

当然还遇到由于提供了对外接口,就是应用层的不是直接访问数据库的,需要通过接口层提供的接口来实现业务,就像是app接口一样,这里应该是接口层 对外提供的接口必须完成app 的需求,而不是应用层要掉用多个接口自己去合并!这里还有一个问题就是效率的问题,如果直接写sql 语句联表查询可能非常快,但是调用接口拼接就很慢了,我在项目里面看到了非常多的这种情况,本来联表查询一句搞定效率也很高,但是后台通过调用其他接口实例化然后再遍历 手动筛选,一个接口要3-8秒才能返回数据!调试bug 的时候就更恶心了,if-else 七八层,随便一个接口500行+,我重写都比改bug快多了!

语言,语法,不应该成为人与人交流的鸿沟,汉语,英语,java,c,等都是语言,知道了单词+语法(框架) 其他的都是一样的,

可以说如果明明懂了 语言+语法+框架,但是代码仍然看的难受,就像是你说了一个小时我特么完全不知道你想说啥的感觉。

最近没有去研究什么框架原理,以前研究过的也都忘的差不多了,感觉还是要在日常工作里面去自己不断优化代码,设计,调试,才能慢慢积累长进。网上流传的框架原理,面试知识点,纸上谈兵,只会让人越看越浮躁,还不如review 一下自己的代码,看看难受不难受,将难受的地方改进一下,将卡顿的地方优化一下,尽量去优化,反而会收获更多也更有意思。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值