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编程容易犯的错误之二的更多相关文章

  1. Android编程容易犯的错误之一

    1.设置TextView的文本颜色 TextView tv; ... tv.setTextColor(R.color.white); 其实这样设置的颜色是 R.color.white的资源ID值所代表 ...

  2. Android编程心得-JSON使用心得(二)

    在Android开发中,我们经常会用到JSON来与网络数据进行交互,下面我来介绍如何对JSON数据进行解析与制造 1.当我们需要对如下JSON串进行制造时: { "download" ...

  3. C语言编程时常犯十八个错误

    C语言的最大特点是:功能强.使用方便灵活.C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经 ...

  4. PHP二维数组的引用赋值容易犯的错误

    大家一起来分析一下下面这段代码: <?php $arr = array(); $arr["abc"] = array("sex" => 100, & ...

  5. javascript中易犯的错误有哪些

    javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...

  6. C#新手常犯的错误

    虽然这篇post的标题是新手常犯的错误,实际上很多有经验的程序员也经常犯这些错误,我整理了一下,就当是笔记.1.遍历List的错误,比如如下代码: List<String> strList ...

  7. 总结下java经常犯的错误

    编写代码是一种艺术,认识错误是我们代码改进的重要途径之一.以下情况并非大家都能碰到过,但希望提高代码质量的人都引以为戒.以下各种情况,都是初学者经常犯的错误. 1.1       字符串没有判断是否为 ...

  8. C#中几个经常犯的错误总汇

    在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错 ...

  9. Android编程中的实用快捷键

    作为一个优秀的程序员,不但要能开发出漂亮的软件,也要能熟练掌握编程的技巧,包括IDE的快捷键使用.比如linux 下的VI编辑器,对于不熟练快捷键的人来说就是一个噩梦,但一旦你熟练了VI的快捷键,VI ...

随机推荐

  1. RPM命令用法

    安装一个包 rpm –ivh 升级一个包 rpm -Uvh 移走一个包 rpm -e 4.校验rpm包 rpm -V < rpm package name> 5.查询一个包是否被安装 rp ...

  2. 取文件MD5 WINAPI

    #include <windows.h> #include <wincrypt.h> #include <stdio.h> BOOL GetFileHash(LPC ...

  3. C#进阶系列——动态Lamada

    前言:在DDD系列文章里面,我们在后台仓储里面封装了传递Lamada表达式的通用方法,类似这样: public virtual IQueryable<TEntity> Find(Expre ...

  4. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  5. XRecyclerView Scrapped or attached views may not be recycled

    将XRecyclerView布局设置为 android:layout_width="match_parent"android:layout_height="match_p ...

  6. HTML5属性--(capture="camera") 上传照片或者打开手机相机

    要获取手机相机拍照或者访问相册    这里贴一个相关链接:http://blog.csdn.net/jackfrued/article/details/8967667 JSP页面代码: <inp ...

  7. 一些js 插件的作用

    前言: 从一些开源网站上下载下来的 后台管理系统模板一般会有很多的js ,其js 的功能是什么呢?这里随手查询了一下,记录下来 正文: 1.zDialog.js 各种弹窗插件详细案例:http://w ...

  8. 线性回归 Linear Regression

    成本函数(cost function)也叫损失函数(loss function),用来定义模型与观测值的误差.模型预测的价格与训练集数据的差异称为残差(residuals)或训练误差(test err ...

  9. gulp打包js/css时合并成一个文件时的顺序解决

    1.可以使用插进gulp-order. 2.可以这样的写法: return gulp.src(['js/common.js','js/**/*.js']) .pipe(concat('build.js ...

  10. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...