Android编程容易犯的错误之二
11.不要太相信工具,比如Eclipse里面的断点遇到多线程什么,经常不起作用/走不到,还有就是如果语句为空的也不会走,这时候别太早下结论断点地方出错了,
所以每个工程都应该有日志的开关,通过查看日志来确认,某个路径是否走到或者某个变量的值,。。。
12.Java中的月份是从0开始的,所以格式化月份的时候,记得在原有的值上加1处理,如:
Calendar calendar = Calendar.getInstance();
if(!TextUtils.isEmpty(dateTimes)){
long milliseconds = WLDateUtils.parseDayTime(dateTimes);
calendar.setTimeInMillis(milliseconds);
}
final int old_year = calendar.get(Calendar.YEAR);
final int old_month = calendar.get(Calendar.MONTH);
final int old_day = calendar.get(Calendar.DAY_OF_MONTH);
mDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
if(year != old_year || monthOfYear != old_month || dayOfMonth != old_day){
String dateTimes = String.format("%04d-%02d-%02d", year,
monthOfYear + 1, dayOfMonth);//月份是从0开始的
}
}
},
old_year, old_month, old_day);
13.设置ListView的分割线,如果不是图片的话,应注意顺序:
mListView = new ListView(this);
mListView.setCacheColorHint(0);
mListView.setBackgroundDrawable(null);
mListView.setDivider(getResources().getDrawable(R.drawable.list_divider));
mListView.setDividerHeight(2); 其中:
<drawable name="list_divider">#00CCCC00</drawable>
即 setDividerHeight 函数应该在setDivider之后,否则这个分割线无效。
14.拼写错误
1)
<uses-permission android:name="android.permission.BLUETOOTH" />
而不是
<user-permission android:name="android.permission.BLUETOOTH" />
而且就算这样写错了,也能编译通过,只不过安装的时候不会显示该APP需要的权限,当然该APP什么权限都没有申请到。
15.当遇到如下的错误的时候(但是直接在PC的浏览器输入地址是没有问题的),第一个感觉是去验证下设备(比如手机是否能联网) ,而不是去找服务器端开发人员,质疑网络配置是不是有问题:
10-15 17:03:36.043: E/XXXApp(5660): Connection I/O Exception :java.net.UnknownHostException: Unable to resolve host "www.baidu.com": No address associated with hostname
16.TextView千万不要被放大,也不要作为将要被放大的父视图中,否则TextView上的文字四周会出现像毛笔字旁边的方框,尤其是大屏幕的设备(比如:电视)很容易看到。
17.selector(XML资源定义)中千万不要将@null给drawable否则,XML inflate时,会报
android.view.InflateException: Binary XML file ...
的错误。解决方法是:采用透明图代替这个@null
18. 对于像ListView、GridView的上下边距,如果怎么设置都达不到效果的时候,可以看看这个clipToPadding的这个属性,其值默认为false的,保证你看完有相见恨晚的感觉。
19.Java的标准代码,也有违反常理的例子,比如Calendar.getInstance(),看这名字,以为是单实例,可看了源代码,就会发现,其实就是一个静态的函数,用于创建Calendar对象
public static synchronized Calendar getInstance() {
return new GregorianCalendar();
}
public GregorianCalendar() {
this(TimeZone.getDefault(), Locale.getDefault());
}
public GregorianCalendar(TimeZone timezone, Locale locale) {
super(timezone, locale);
setTimeInMillis(System.currentTimeMillis());
}
20.对于有时偶尔遇到的问题,应该考虑下是否是多线程引起的问题,多打LOG,对于可能引起问题的地方,加个同步所看看。
21.使用ViewStub时遇到如下的FC log
E/AndroidRuntime(4441): java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
E/AndroidRuntime(4441): at android.view.ViewStub.inflate(ViewStub.java:287)
Java代码
mAttachViewStub.setVisibility(View.VISIBLE);
View view = mAttachViewStub.inflate();
mScreenView = (ScreenView)view.findViewById(
R.id.attachment_type_screen);
排查才知道,其实mAttachViewStub.setVisibility(View.VISIBLE)相当于mAttachViewStub.inflate(),所以以上的代码相当于重复inflate了ViewStub,导致FC。
以上选择其中一个即可,当然用直接调用的话比较好,查找效率高:
View view = mAttachViewStub.inflate();
mScreenView = (ScreenView)view.findViewById(R.id.attachment_type_screens);
而如下的方法,效率明显低些,尤其整个页面的View比较多的时候,因为需要在整个页面查找View:
mAttachViewStub.setVisibility(View.VISIBLE);
mScreenView = (ScreenView)findViewById(R.id.attachment_type_screens);
22. 千万不要将原本是JPG格式图片文件的扩展名标记为PNG,这样平常用Eclipse开发的时候没有报错,但是一旦用源码编译就会出现问题:
libpng error: Not a PNG file
ERROR: Failure processing PNG image packages/apps/Contact/res/drawable-xxhdpi/title.png
竟而导致以后一堆的:
packages/apps/Contact/res/layout/detail_box.xml:89: error: Error: No resource found that matches the given name (at 'background' with value '@drawable/add_pic_btn_bg').
当然也不要将PNG图片文件的扩展名标记为JPG。
23.注意id不要写重了,尤其是有用include layout 或者字节写的控件布局的,通过findViewById找到的是第一个匹配的id;
这个查起来就很麻烦。(20161229)
Android编程容易犯的错误之二的更多相关文章
- Android编程容易犯的错误之一
1.设置TextView的文本颜色 TextView tv; ... tv.setTextColor(R.color.white); 其实这样设置的颜色是 R.color.white的资源ID值所代表 ...
- Android编程心得-JSON使用心得(二)
在Android开发中,我们经常会用到JSON来与网络数据进行交互,下面我来介绍如何对JSON数据进行解析与制造 1.当我们需要对如下JSON串进行制造时: { "download" ...
- C语言编程时常犯十八个错误
C语言的最大特点是:功能强.使用方便灵活.C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经 ...
- PHP二维数组的引用赋值容易犯的错误
大家一起来分析一下下面这段代码: <?php $arr = array(); $arr["abc"] = array("sex" => 100, & ...
- javascript中易犯的错误有哪些
javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...
- C#新手常犯的错误
虽然这篇post的标题是新手常犯的错误,实际上很多有经验的程序员也经常犯这些错误,我整理了一下,就当是笔记.1.遍历List的错误,比如如下代码: List<String> strList ...
- 总结下java经常犯的错误
编写代码是一种艺术,认识错误是我们代码改进的重要途径之一.以下情况并非大家都能碰到过,但希望提高代码质量的人都引以为戒.以下各种情况,都是初学者经常犯的错误. 1.1 字符串没有判断是否为 ...
- C#中几个经常犯的错误总汇
在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错 ...
- Android编程中的实用快捷键
作为一个优秀的程序员,不但要能开发出漂亮的软件,也要能熟练掌握编程的技巧,包括IDE的快捷键使用.比如linux 下的VI编辑器,对于不熟练快捷键的人来说就是一个噩梦,但一旦你熟练了VI的快捷键,VI ...
随机推荐
- CSS常用浮出层的写法
点此查看实例展示 是的,我们即将实现的就是以上功能,是不是很生动? 贴上HTML: <div class="poptip"> <span class=" ...
- VirtualBox装ghost XP
在win7 professional 64上安装了virtualBox4.3.14 r95030 版本,之所以要安装这个vb,是因为刚升级的vm 打开之后很占用cpu, 网上又说vb不是很占用cpu而 ...
- 我常用的VS技巧
声明:开发工具使用的是VS2013 1.开发 包括编辑,代码补全等 1.1快速选择一行 第一种方式:鼠标停留在要选择的行上,三击. 第二种方式:鼠标停留在要选择的行上,按home键将鼠标停留在行首,按 ...
- 如何在个人博客引擎 Hexo 中添加 Swiftype 搜索组件
在您现在看到的我的博客站点,后台使用的是 Hexo 作为博客引擎,但是默认集成的搜索组件是进行 form 提交到 Google 进行搜索的,为了更好地体验,本文介绍如何在 Hexo 博客中集成 Swi ...
- 【Alpha】十天屠龙记
团队名字: 一不小心就火了 屠龙天团少年们: 031402504 陈逸超 (组长) 031402505 陈少铭 031402511 黄家俊 031402515 翁祖航 031402516 黄瑞钰 03 ...
- iOS开发知识点总结
main文件做了这几件事: 1. 创建当前的应用程序 2. 根据4个参数的最后为应用程序设置代理类(默认情况下是AppDelegate) 3. 将appDelegate 和 应用程序 建立关联(指定代 ...
- SetEnvlfNoCase 记录从自己网站之外传来的请求
<FilesMatch \.(jpg|gif|png)$> SetEnvIfNoCase Referer "^http://www.example.com/" loca ...
- PRINCE2七大原则
我们先来回顾一下,PRINCE2七大原则分别是持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第三个原则:明确定义的角色和职责. 项目离不开人员,错误的人来了,合适的人没 ...
- MFC的多线程操作
记得用MFC做了一个图像自动修复软件,当时没有多线程操作这一概念,由于图像修复算法比较复杂,因此,当执行图像修复时,程序就像卡死了似得而不能做其他操作.其实MFC对这种情况有一种很好地解决方案,那就是 ...
- java 部分注解说明(待补充)
内容 所代表的意思 @RequestMapping(params = "save") @ResponseBody 将内容或对象作为http响应正文返回,并调用适合HttpMessa ...