【安卓开发笔记】(二)心得篇


(注:本文属于小作文级别,对于需要解决某个具体问题可能没啥作用,全篇都是废话,因为关键词匹配点进来的、又着急解决实际问题的同学还是直接叉掉吧)

前言

第一次接触安卓开发,我深刻地领悟到了一点:纸上得来终觉浅,绝知此事要躬行!
虽然指导书已经说得很详细了,但我还是很不幸地把该踩的坑全部踩了一遍,不过也有了很多收获。以下是一些知识技能、踩坑经历及解决过程和方案、心得体会的简要回顾。

知识技能:

Android Studio基于idea开发,一打开界面让人感受到扑面而来的熟悉感,但是它的项目结构异常庞大,夹杂着各种复杂的配置文件。实不相瞒,我以前只是听说过XML文件,而没有实际打开过它,但是最近为了折腾安卓,我已经动手改了不下二十遍XML文件,不需要理论教学,我已经在实践中大概懂得它是什么,能用来干什么,以及怎么改了。
界面设计是安卓开发过程中的关键一环。在初期根据指导书的指示编写代码的过程中,我不时会出现看着a敲出了b的情况,于是就导致我的界面显示异常(如错位),但正是在调整的过程中,我发现并不需要刻意地记住一些标签、布局的名字,因为界面和标签布局是映射的关系。而且经过几次通过微调代码(找bug)调整界面的尝试后,我能在发现界面与预期不符的情况下较准确、较快速地定位错误位置,并且加以修改。

踩坑经历:

有人说指导书是万能的,但我觉得不是这样,因为在实际开发的过程中没有一种指导能帮你避开所有的问题。并且,还有一种可能,指导书本身就有一点点问题,也许是为了避免我们不经过思考而直接复制粘贴所以特意留了一点点bug。

在计数器的改进项目中

我照着指导书敲了所有的代码,但是发现旋转之后显示值还是0,需要再点一次才会显示竖屏时的数值加一。
运用程序设计中所学到的语言的作用域的相关知识,我发现其中一处的局部变量定义有误,应将其转为全局变量,最终解决了这个问题。

在编写登录界面的过程中

我因为漏了布局定义的一行android:orientation=“vertical” 导致界面无法显示,不过经此一事我也明白了这个属性的重要性。

新闻列表

这是耗费我精力最多、也是我收获最大的一个项目。
我简要总结一下完成这个项目需要什么。首先,不同的布局需要在类函数中使用不同的数据结构(比如如果只显示标题,一个简单的ArrayList也能完成,但要同时显示图片标题和子标题,就需要另外定义一个news类),在布局文件中修改不同的配置。适配器是本项目的重点,不过我并没有遇到这方面的问题,所以之后不再赘述。

在只显示新闻和标题的步骤中,我发现凡是’之后的内容都无法显示,于是我觉得会不会是’在文件中被当做了特殊字符(比如句子分割、结束的标志位),于是我将英文的’换成了中文的’,问题成功解决。后来再仔细看指导书,发现其实也是用的中文’。再之后有同学说经上网查阅资料,与“UTF-8不认识英文的’,只认识中文的’”有关。

在加入图片显示的步骤中,卡片布局的引入,一度让我的项目进度陷入僵局。先是我直接将指导书上的依赖配置代码加入build.gradle文件后报红线错误,大意是版本不匹配,我不太理解其中的意思,一度以为是和我的SDK、gradle甚至AS本身这个IDE的版本有关,而上网找到的方法也不能解决问题(比如直接改成androidx的一行,直接在xx文件中加入什么什么标签),后来经过向老师请教,老师指出是卡片布局要和上面一行的组件定义版本一致,于是build成功。

经验总结

回顾这一段经历,其实IDE一开始也给了明确的提示,只是我没有理解其中的意思,所以在忙着乱改各种配置的时候多次与正确答案擦肩而过;另外,回过头去梳理网上的解决方案,它们并非没有用,而是一个问题的暴露往往是牵一发而动全身的,虽然看上去大家的报错是一样的,但其实大家别处的配置不一样,在他那里,他只需要改这一处就已经使得所有配置相统一,而在我这里却并非如此,这个问题在后续也再次体现了出来。所以要去找解决方案,不是简单地复制粘贴报错内容,点开排名第一的答案照着做,而是要弄懂他这么做的逻辑(原理)是什么,和自己的实际情况是否相符,有条件的话还得先观察一下他的其他配置和自己的是否相符;另外,吃了三个包子之后饱了,但并不是因为只吃第三个包子就可以饱。当一个答主声称他怎么怎么做完美解决问题的时候,可能他前面经过了无数次别的尝试,最终的解决有可能是这其中的某些步骤叠加作用的结果。所以看方案也不要直接下滑到最后一步,要注意观察别人前面做了什么,会产生什么影响。

后续及终章

虽然前面build成功,但是真正在真机调试的时候出现了打开十多秒后闪退的情况。直觉告诉我应该是版本不兼容的问题,我想起了高版本可以兼容低版本的说法,于是将build.gradle(app)中的配置换成了最新的SDK33,依赖项也全部换成了androidx相关的,但是这次居然变成了秒闪!最后,经过排查和同学的提示,我发现虽然我在gradle文件改了配置,但在XML布局文件中指定的卡片布局还是原来不兼容的版本。(即:已开始从v-28换到26勉强能看,而v-28和androidx的就彻底不兼容了),经过修改,最后终于不再闪退。(不过其实也是因为v7组件太旧了,之后要再去兼容适配应该也很有难度 ,早点换到androidx的也是好事)
但是我又发现了一个新问题,那就是子标题不在卡片范围内。如下图所示:
在这里插入图片描述

图10:排版错位的版本

直觉告诉我是XML文件出了点问题,虽然一开始也瞄准了子标题所在的TextView,但是可能是因为前面改bug改得糊涂了,我硬是没看出来有问题,于是转头开始折腾起卡片高度、图片高度、图片自适应等等…最终又再次回到TextView本身,通过仔细比对,我终于发现原来是layout_below的标签写错了。虽然这个低级错误让人哭笑不得,不过对我来说是教训深刻!深刻程度不亚于把l和1混乱然后改了几个小时bug的程度
相关的问题我会狠狠记住,不会再有下次了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值