csdn

  • ​预期效果:通过点击文件夹或文件,选择文件或文件夹,并返回选择的路径

    总结

花了几天时间,做这个小程序,初步学习并体验了一下android开发。没想到看似这么基础的功能,也需要五六百行代码来实现。学习过程就是把网上前人的代码片段扒下来,然后一点点看懂,纠错,完善,通过看懂别人写的代码来学习。把学习到的东西,后来遇到的一些困难,以及解决的方法,作为笔记整理记录一下。

1.第一次深入了解面向对象语言,了解了面向对象语言的很多基础知识,如基类,派生类,接口,继承,implements的使用条件和规范,this的各种用法,和一些基础的方法,如super()。第一次学习xml文件的标签语言,如何用xml文件组织运行程序的各种资源,以及不同activity之间的通信方法。

2.学习了android软件开发的一些流程,从package下的文件构成,res下文件的作用,gradle的使用,manifest中注册activity,签名打包成apk文件,初步了解了整个android开发的基本流程。

3.了解了一些在android开发debug的一些基本方法。

(1)由于没学Kotlin,只会用Java,因此在网上看教程的时候,常常出现看不懂别人写的kotlin代码的情况。这时候可以用android studio中tools的Java和Kotlin代码互相转化的工具,将看不懂的Kotlin代码转化为Java代码帮助理解。

(2)最开始是用usb连接手机和电脑进行调试的,后来发现了一个更方便,更快捷的调试方法,就是用adb插件进行无线调试,网上很多教程,就是注意一点,华为的鸿蒙系统,设置里没有直接进行扫码与android studio链接的功能,需要手动开启电脑的命令框,进行连接,网上也很多教程。

(3)刚开始不知道有LogCat这样一个android studio自带的日志记录软件,程序崩溃退出老是找不到原因,也不会去看报错,就直接用Toast向屏幕发信息来调试。知道LogCat之后,程序崩溃的Log可以看的到,调试就方便了太多了。

(4)对于一些常见的报错和崩溃,有了些认识。比如空指针报错,在Java开发中算是最常见的了。往往就是初始化对象,没有实例化,在之后的使用中就报错,让程序崩溃了。或者是findObjectById的方法,必须先将Object在layout中加载出来,不然绑定的时候程序会直接崩溃退出。所以要养成好习惯,设置好异常流的检查,用try,catch,finally的语句控制检查运行异常。

(5)比较离谱的bug,实在绕不过可以换种方式写。在这次实践中,就有一处写的和官方一摸一样,编译器还报错的,换了种类似的写法,就完全没有问题了。还有些离谱的问题,就只能靠经验积累了。比如有一次突然就不能显示文字了,反复查看才发现字体颜色没设置,与背景混为一体了。

(6)由于android更新换代非常快,经常会出现一些方法突然用不了了,过时了之类的问题。这时候就需要仔细鉴别和设置各种版本了。利用gradle下的版本管理,非常的方便,可以很容易的设置sdk版本,编译器版本,依赖库资源等各种版本。遇到最新的问题时,可能有用的中文教程非常有限,还是需要到官网上学习最新方法的使用。这一次实践中,由于要切换activity,并在不同的activity之间进行通信,原有的教程中,使用的是setActivityForStart()和OnActivitySet方法。在最新的sdk30版本中,已经标记为废弃该方法进行活动间通信了,要使用最新的ActivityContracts,来规范信息传递,让方法更高效安全。网上很多教程都不合适,于是只能去官网上学习了contracts的写法。还有一个版本带来的问题。早在android 4.0之后,系统就开始对app的存储修改权限做出了限制,无法随意修改读取。在最近的android10.0更新之后,又做了一次修改,使得android系统中app的读取权限更小了。在manifest文件中申请的权限,实际上十分小了,仅限于app安装的目录下的cache文件。若要进行越界内存访问,需要更多的内存申请方法。在了解这些版本问题之前,经常被莫名奇妙的bug困扰,这就是为什么,有时候照抄别人代码,程序也会报错崩溃。

(7)关于uft8编码和另一种中文编码不能被app读取路径的问题,其实是不存在的。后面看Log才发现,程序闪退是因为List为null,和编码没关系。比较新的android版本对于中文的支持都挺好了。

4.csdn帮助了我很多,有很多很不错的大佬写的教程。但是面对有些棘手的bug,中文教程看了几十篇也找不到可行方案时,就很头疼了。这时候最好应该直接去官网上学习,看不懂英文也没关系,反正有翻译。官网上的教程可以说是最好最详尽的了,是个高质量的学习途径。

5.有时候发现一个bug改不出来,可以向大佬们请教,相互交流。在一些QQ群中,或者交流网站,都有很多厉害的大佬,说不定困扰很久的问题,大佬一眼就能帮自己点破,而且能了解一些高效学习的方法。这对于初学者来说帮助挺大的。

6.不足和改进:这个程序只能读取app中cache下的文件资料,因为版本问题,高版本的android限制了app对公共存储的访问。如果要申请对其他内存的访问,应该使用最新的访问api协议。对于面向对象编程方法的巧妙之处理解还很浅显。写的代码很容易就变成面向过程了,就失去了面向对象编程的意义。大佬说最新的androiid提供了一个全局管理activity的方法,就不用intent来切换activity了,这样反而更慢。全局管理应该是个好东西,值得学一手。

除了作为笔记,还有一点就是看到好的教程太少了,基本上都是代码片段,或者不完整,或者版本陈旧,无法参考,因此发了个最完整的带各种注释的文件供初学者实践参考。