Android 开发中常会遇到些什么问题
Android 开发问题集锦
问题一:No marked region found along edge错误
答:如果在Android项目中使用Nine Patch资源,时候可能出现比如ERROR: 9-patch image eoeAndroid .9.png malformed.或 No marked region found along edge.以及 Found along top edge.的错误主要是因为该图片没有四周的定位像素。
问题二:layout_weight的作用是什么?
答:很多时候大家可能发现布局xml文件中有一个layout_weight属性,不是layout_height也不是layout_width,那么 layout_weight是什么呢? 它的定义是一个比重。比如在一个LinearLayout中,有三个TextView控件,如果第一个设置layout_height为1,第二个为1,最后一个为2,这时候这三个TextView控件的大小为 1:1:2 。在Android开发中我们可能经常用到这个属性来排列一些控件。
问题三:Android Zip解压缩类处理中文名乱码
答:目前Android平台上的底层库仍然有很多不完善的地方比如zlib库处理Zip文件时无法对中文文件名做正确的处理,同时无法类似J2SE那样 的android.util.zip类没有setEncoding方法处理。目前解决方法是引入apache的ant库来实现解压缩,同时apache ant库好包含了完整的xml dom4j解析库可以实现document的保存。
当然引入apache ant库的问题是造成程序编译后体积变得臃肿,算法因为是java写的效率上会大打折扣,但是解决下问题还是可以的,重量级处理还是放到服务器上比较好。
目前总体来看Android平台底层库很多地方做的不近人如意,很多关键地方都出现了问题。
问题四:layout_toRight错误解决方法
答:有朋友询问在导入一些老版本的Android项目时出现了layout_toRight 的错误提示,具体的如No resource identifier found for attribute ‘layout_toRight‘ in package ‘android‘,其实在Android 1.1开始SDK做了小幅的改变,比如android:id均换为android:name,这里layout_toRight换成 layout_toRightOf即可。有些情况ADT还可能帮助我们修正问题,Tony提示直接在错误的地方单击鼠标右键,选择Quick Fix不妨看看。
问题五:Android方法中的synchronized是什么意思?
答: 很多朋友可能看到部分Android方法中出现了synchronized字样,比如public static synchronized String getHttpResponse(String url) ,其实这个问题属于Java基础和Android无关,使用关键字 synchronized 字面表示同步,而实际中在多线程程序里
为了防止结果出现意外(会出什么意外呢?Tony举例比如一个线程正在写文件,还没有写完,但是另一个线程就开始读取了),加入synchronized可以为该方法上锁,即只有一个线程单独访问该方法,类似Win32中的临界区Critical Section是一个道理。不过要提示大家该方法不要滥用,在线程安全的场合下使用会增加系统开销影响性能。而有些时候还会在方法中出现 synchronized(this) 字样,不错 synchronized(this) 一般用于锁住某个循环中的内容,在iPhone Cocoa中也同样适用。
问题六:ListView在ScrollView中无法正常显示
答:对于ListView放在在ScrollView中时,目前Android平台仍然有些bug,状态是显示的ListView仅仅大约一行半(总Item 肯定大于2行,比如10行),通过Layout布局属性设置目前仍然无法修正。通过分析ListView和ScrollView构造没有发现很好的解决方法,目前可以通过自己实现ListView来解决,Tony解决的方式是重写ListView的onMeasure重新计算显示行数。希望在 Android以后的版本,至少2.1以后能够改进。
问题七:The content of the adapter has changed解决方法
答:很多新手在Android开发时可能对Thread和Message以及Handler、Looper概念不是很清楚,可能产生类似 The content of the adapter has changed but ListView did not receive a notification make sure the content of your adapter is not modified from a background thread . but only from the UI thread.的错误。来自邮箱中这个问题,解决方法必须要详细的代码,不过给出以下几点可以帮助你了解该问题:
1.尝试Adapter的notifyDataSetChanged()方法,当然主要看你代码的具体情况。
2.改变适配器Adapter内容时不要在后台线程中,必须在UI线程中处理,这点可以通过Handler传出来解决。
问题八:Adapter中notifyDataSetChanged的作用
答:对于Android开发来说处理一些界面需要和Adapter适配器打交道,虽然Android自带了一些比如ArrayAdapter但是大多数情况下无法满足我们需要,所以就要从BaseAdapter派生一个类满足我们特殊的需要。
首先我们可能重写getView(),通过LayoutInflater的inflate方法映射一个自己定义的Layout布局xml加载或从xxxView中创建。这些大家可能滚瓜烂熟了但是仍然很多Android开发者对于BaseAdapter中notifyDataSetChanged()方法不是很理解,notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。
问题九:Resource is out of sync with错误
答:很多网友抱怨Android的Eclipse很差劲,经常出现一堆莫名其妙的错误,Resource is out of sync with the file system错误如何解决呢? 这主要是由于资源文件被Eclipse之外的编辑器打开了,为了保证刚才保存的东西不受冲突,IDE自己保护了,解决的方法最笨的就是关掉Eclipse 再开,提示资源保存时单击No,或者直接按F5键,如果程序时自动编译的清空下项目会重新生成。的确从多年前的Symbian时代开始Carbide C++(基于Eclipse)就从来没有给开发者带来过效率,相比开发iPhone的xCode或者Windows Mobile的Visual Studio来说Eclipse这个Java开发的东西实在不敢恭维啊,假死和糟糕的用户体验实在让人难忘。
文章整理自长沙软件培训http://www.cshope.net/
本文出自 “皇额娘的博客” 博客,请务必保留此出处http://8878509.blog.51cto.com/8868509/1408402
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。