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 ...
随机推荐
- iOS面试
1.进程.线程的区别?2.“三次握手”是什么?具体细节,连接释放时需要几次“握手”,说出大概过程.3.TCP.UDP协议的区别?计算机网络分几层,以及TCP.Http协议各自工作在哪一层及相关细节.4 ...
- MVC5 + EF6 + Bootstrap3 (16) 客户端验证
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-client-side-validation.html 系列 ...
- MVC之前的那点事儿系列(8):UrlRouting的理解
文章内容 根据对Http Runtime和Http Pipeline的分析,我们知道一个ASP.NET应用程序可以有多个HttpModuel,但是只能有一个HttpHandler,并且通过这个Http ...
- CSS基本知识3-CSS盒模型
box-sizing: content-box|border-box|inherit; 值 描述 content-box 这是由 CSS2.1 规定的宽度高度行为. 宽度和高度分别应用到元素的内容框. ...
- go mysql 初窥。查询
先来几句草泥马草泥马... 首先要安装Go-SQL-Driver/MySql,下载安装前要保证你的GOPATH对应的是你的项目目录 export GOPATH=/var/www/gogogo/test ...
- jeecg表单页面控件权限设置(请先看官方教程,如果能看懂就不用看这里了)
只是把看了官方教程后,觉得不清楚地方补充说明一下: 1. 2. 3. 4.用"jeecgDemoController.do?addorupdate"这个路径测试,不出意外现在应该可 ...
- C++中Reference与Pointer的不同
Reference与Pointer中直接存储的都是变量的地址, 它们唯一的不同是前者的存储的地址值是只读的, 而后者可以修改. 也就是说Reference不支持以下操作: *a = b 其他语言, 如 ...
- ssh中org.springframework.orm.hibernate4.support.OpenSessionInViewFilter的作用及配置
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 是Spring为我们解决Hibernate的Session的关闭 ...
- 使用VS Code 从零开始开发并调试.NET Core 应用程序
最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...
- 使用matlab进行空间拟合
假设有这么一组数据, x=[4 5 6 7 8 4 8 10]'; y=[56 56 56 56 56 60 60 60]';z=[6 6 6 9 6 19 6 6]'; 要求出其平面方程z=C+Ax ...