最近开发一个和NBA相关的软件,遇到了一些问题,在此做个记录,以备后查。
1. 网络问题
01-07 08:56:53.106: E/AndroidRuntime(676): FATAL EXCEPTION: main
01-07 08:56:53.106: E/AndroidRuntime(676): android.os.NetworkOnMainThreadException
据说Android版本在4.0之后,如果在UI主线程中处理http请求都会出现这个错误,所以,开一个新线程来访问http吧
2. UI显示问题
01-07 20:30:30.770: E/AndroidRuntime(16754): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
UI显示与刷新只能在主UI线程中,放在子线程中会出现这个问题。
3. String为空
当定义的string 为 null的时候,不能用indexof判断,会报错
4. 解析网络的jsoup
对网络编程完全没概念,但是学jsoup解析倒是上手挺快,至少自己用的功能都摸索着实现了。
5. 关于layout
android:layout_*** 表明的是子控件在父控件中的相对位置
android:gravity 表明子控件的内容在子控件中的相对位置
6. 关于屏幕适配
屏幕适配其实说穿了也就是决定,对于不同的设备,你的dp或sp到底设置多少?
在屏幕适配的过程中,其实有两个变量:
第1,屏幕的密度。
Dpi是映射到屏幕上的单位,与像素Pixel的关系如下:Dpi = k * Pixel
其中K是系数,根据屏幕不同,k也不同
ldpi :k = 0.75
mdpi :k = 1
hdpi :k = 1.5
xhdpi :k = 2
在编程的时候需要对这些有了解。
第2, 屏幕的大小。
也是下了点功夫,上京东搜了所有热门品牌做了一个屏幕尺寸的统计,不是很全
主要的屏幕大小还是集中在480*800, 480*854, 540*960, 720 * 1280
关于屏幕密度和屏幕大小两者之间的关系,网上找到的图如下
适配路漫漫啊。。。
7. onclick和ontouch并发的问题
在listview上增加了左右滑动切换的功能才碰到的。
listview本身的点击采用onItemClickListener实现,左右滑动采用onTouch检测。
实现的时候没有怎么注意细节,后来调试的时候发现:左右滑动listviw时候,很容易就onclick了,也就是ontouch结束了还是触发了onclick
网上查到了一些信息,很有用:http://blog.csdn.net/daodaowolf/article/details/8247516
关键的是其中一句:
如果在Touch事件的down action的时候返回false,则表示这个组件不会吃掉这个down event,并且对touch的后续动作都不感兴趣。那么整个touch的动作,从一开始刚点击下去的时候,你就不会再被回调到了。
8. 关于sleep
sleep放在那里,就让哪里的线程sleep
如果放在子线程,那就是子线程中;
如果你放在了主线程中,那么整个UI主线程会停止,在sleep的过程中,UI会停止变化,一般不要在主线程中sleep
9. 编程的时候逻辑一定要清晰
最近在思考,是不是编程的时候基本上都可以按三条线来实现
一条是UI线:主要是UI显示,UI更新等等
一条是数据线:数据获取、存储、调用、更新等等
一条是命令线:主要是各种用户触发等等
一个流程包括三条线,这样逻辑会不会清楚一点?
10. 以前写程序,问题解决了从来不总结,之后遇到问题就回忆半天,很累,以后还是多记录一些吧
11. 欢迎球迷朋友们下载我的PalmNBA,下载链接 http://www.appchina.com/app/com.snaillabs.palmnba/