**1.Caused by: java.lang.ClassCastException: **android.widget.TextView cannot be cast to android.widget.Button ClassCastException:类型转换错误,TextView不能转换位Button,原因是我在findViewById的时候将TextView的一个声明成button,还有就是讲findViewById前面的(TextView)写成(Button)
**2.Caused by: java.lang.IllegalStateException: **ScrollView can host only one direct child
根据报错信息提示,ScrollView控件下面必须有且只有一个子布局,不要将ScrollView当ListView等布局来直接在其中编写控件,而要先在ScrollView控件中写入LinearLayout,然后再将其他子控件写入到LinearLayout;
**3.java.lang.IllegalStateException: **Cannot add header view to list -- setAdapter has already been called.
原因是我的ListView需要addHeadView();但是我是在setAdapter()方法之后才addHeadView的,但奇怪的是,这种做法在4.0版本上都没有报错,在4.0版本上面报错;
4.我在写一个布局文件的时候需要将一个按钮的监听器OnClickListener在按钮点击之后重新设置(也就是在OnClickListener监听器响应之后就改变这个监听器),在Android4.0上面这个更改过的OnClickListener在响应完一次后,又恢复到了原来的OnClickListern监听器,但是在2.3则维持了改变后的OnCLickListener;
5.Invalid project description
今天我在导入一个Library项目时,出现了这个提示,搜索的结果是项目中.project文件中name可能是因为你的工程名不同而造成的我检查后并没有发现不同,后来想到导入Library的项目时,Library项目和导入Library的项目需要处在同一级目录下,于是我将Library复制到workspace,这样就好了;
今天又遇到同样的问题,度娘和谷哥都是说项目中的.project中的name和项目名字不一样,但我的确实不是这个问题,后来看一篇博文说的是因为AndroidManifest.xml文件版本不同造成的,解决办法是将项目复制到其他地方再导入即可,我将项目从workspace中复制到桌面导入,果然可以了。
6.Migrate Android Code
这是我在从svn下载一个项目时遇到的,搜索的结果基本是将代码中的switch cases 改成 if else的方式,在eclipse中可以使用 ctrl+1快捷方式切换,具体原因我还不清楚,如果你知道原因,请回复或者
发我邮件,谢谢;
7.Eclispe无法识别Android SDK的目录
可以尝试升级adt来解决这个问题
8.最新版的adt无法创建R文件
打开Android SDK Manager,勾选第一个目录中的Anroid SDK Build-tools并下载安装即可
9. JAVA开发和Android开发最常遇到的异常(没有之一),每一个学JAVA的人都对他恨之入骨,由于其可能导致的原因众多,我就讲讲我遇到的情况,我是因为用map获取一个不存在的key导致爆出空指针异常
10.java.lang.NoClassDefFoundError:com.umeng.analytics.MobclickAgent
android 植入友盟/广告异常, ADT18对引用的jar有要求,要求jar包要放到项目下的libs里才可以找到,否则apk不会包含该jar包。
11.Unable to execute dex: Multiple dex files define Landroid/support/v4/app/ActivityCompatHoneycomb;
libs下的android-support-v4.jar重复,将android-support-v4.jar删除即可
12.com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Unable to read C:\AndroidManifest.xml: java.io.FileNotFoundException: C:\AndroidManifest.xml (系统找不到指定的文件。)
- Win7 下
进入:C:\Users\(当前用户).android
删除:debug.keystore,ddms.cfg 二文件 - xp
进入:C:\Documents and Settings\Administrator.android
删除:debug.keystore,ddms.cfg 二文件2、重启 eclipse
13.[2013-06-04 09:56:29 - xxx] Re-installation failed due to different application signatures.
[2013-06-04 09:56:29 - xxx] You must perform a full uninstall of the application. WARNING: This will remove the application data![2013-06-04 09:56:29 - xxx] Please execute 'adb uninstall com.xxxx.xxx' in a shell.[2013-06-04 09:56:29 - xxx] Launch canceled!原因是手机或者模拟器里面装了已经发布的带有自己签名的apk了,但是项目开发中用的是自带的模拟debug证书,解决办法就是英文提示所说的,删除模拟器或手机里面已经安装过得项目apk,然后再run一下项目即可
14.The library 'android_xxxxxxxxx.jar' contains native libraries that will not run on the device.
在网上搜索的方法不能解决我的问题,最后在stackoverflow发现了一个解决办法,在Eclipse上面设置,选择windows——preferences——android——build,取消勾选改设置页面Build Setting的第一个和第二个复选框即可
如图所示:
15.java.lang.NoClassDefFoundError:com.umeng.analytics.MobclickAgent
添加友盟sdk出现的错误,解决办法是右键项目,选择“Properties”,然后点击Java Builde Path——Order and Export,将未勾选的jar包复选框勾选确定即可
如图所示:
16.LogCat无法输出日志信息
将LogCat关掉重新打开即可,点击LogCat右边的叉号即可关闭LogCat,然后点击Windows——Show View,看看有没有LogCat,有的话就选择,LogCat就会弹出,没有的话,点击other,在弹出框中点击Android文件夹,选择LogCat即可
如果重启LogCat还不行的话,可以重启Eclipse
java.io.IOException: 您的主机中的软件中止了一个已建立的连接。 at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:854)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:822)
at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:781)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:649)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:42)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:577)
原因是打开了两个Eclipse,关掉其中的一个即可
18.Failed to allocate memory: 8 This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
原因是使用的模拟器的分辨率太高了,已经超出了你电脑实际分辨率的尺寸,我创建的模拟器是pad,但是它的宽度已经超过了我电脑的实际分辨率,所以出现了这个问题。
19.sun.misc.BASE64Encoder无法导入这个方法
按说是sun的方法,jdk应该直接可以用的,但其实这个jar是jre/lib/rt.jar,我们需要右键项目->属性->java bulid path->在Libraries选项下点击jre System Library->access rules->resolution,在弹出的框里面上面选择accessible,下面填上** ,然后点击确定即可,还有就是其实不推荐使用java自带的base64方法,大家在实际项目中可以去使用apache的base64方法。
20.升级了ADT22之后报java.lang.NoClassDefFoundError错误
右键项目名称-->>Build Path-->>Configure Build Path-->>在Order and Export中选中Android Private Libraries-->>OK
最后点击Project-->>clean一下当前项目就ok了.
(如果还是没有成功的话,就选中Order and Export中所有的, 然后再clean一下.)
21.腾讯微博分享更改REDIRECT_URI出错(无法更改REDIRECT_URI)
学习腾讯微博的demo,由于使用了Library库,所以讲APP_KEY、APP_KEY_SEC和REDIRECT_URI都填入到了AndroidSDK项目的src——config——config.properties中,运行一下后报错,返回信息是errorcode:10015,这是因为我填的REDIRECT_URI不对,然后我将原路径的REDIRECT_URI改掉了,但是运行之后还是原来的错误,后来我将APP_KEY、APP_KEY_SEC和REDIRECT_URI全部换成同事申请可用的,但是在我这里还是一开始的错误,我怀疑可能是bin目录有问题,但是clean之后运行还是不行,后来发现在demo项目的Android Private Libraries下面有4个jar包,其中3个是腾讯微博所需要的,在Android_SDK.jar下面有同样的config.properties文件,里面的
APP_KEY、APP_KEY_SEC和REDIRECT_URI是旧的,我的解决办法就是把所有的demo中的libs中的jar全部删除,然后直接引用libraries
22.Eclipse运行项目安装时出现:Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE这个错误的字面意思就是:“安装失败,内存不足”,如果是真机出现这种情况,将手机中的app删掉几个就可以了,如果是模拟器出现这个情况,网上的答案是使用命令行:emulator -avd MyAndroid -partition-size 120
23.今天在运行一个项目的时候出现了这个问题:Caused by: java.lang.ClassNotFoundException: android.support.v4.ViewPager
一般情况下,出现这种情况下都是因为项目中缺少android-support-v4.jar或者没有引用这个jar包引起的,但是当我在项目中新疆libs目录,并拷贝android-support-v4.jar包到libs引用之后,这个问题还是不能解决,最后我在stackoverflow上面找到了解决办法:右键选择项目Project->Properties->Java Build Path than select Order and export,然后点击右边的TOP按钮,将android-support-v4.jar或其所在的libraries置顶,最后clean一下项目即可运行
24.Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
出现此错误主要是我们使用context.startActivity()方法造成的,因为使用Context的startActivity方法需要开启一个新的task,增加intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即可。
25.这是最经一段时间我在windows平台打包常见的一个错误(adt升级为22之后),困扰了我很久,终于找到了解决办法
控制台提示错误为:
[2013-07-12 10:46:15 - xxxx] Warning:
org.apache.commons.httpclient.ChunkedInputStream: can't find
referenced class
org.apache.commons.logging.LogFactory 。。。。
解决办法是在项目中的proguard-project.txt文件中添加:-ignorewarnings和-libraryjars libs/xx.jar,记得将libs的所有jar包都按照这样的格式写
最后就可以正常打包了
26:java.io.IOException: Can't read [...\libs\comments-httpclient-3.0.1.jar] (No such file or directory)
这个错误也是在打包的时候发生的,如同字面意义上面说的一样,就是没有找到comments-httpclient-3.0.1.jar这个jar,可能是项目中没有这个文件,我遇到这个问题是因为我在proguard-project.txt添加-libraryjars libs/comments-httpclient-3.0.1.jar时将jar包的名字写错了,所以导致了这个问题
解决办法就是在proguard-project.txt中将jar包名更正即可正常打包
27.Failed to create the Java Virtual Machine
原因是本机内存不够,而eclipse方法区(Perm Gen)占用内存太多的缘故解决办法是找到eclipse的解压目录中的eclipse.ini文件打开编辑,
如下图
另一个办法是在eclipse.ini文件中增加jvm的完整路径,
-vm
D:\Java\jdk1.6.0_29\bin\javaw.exe
注意这个参数的放置位置,我放在文件最下面时还是不行,放在-vmargs参数上面就可以了。
详情请看:http://blog.csdn.net/yuanfei_1988/article/details/5919168
28.Can't bind to local 8700 for debugger
在运行项目的时候,控制台出现如上错误,应该是端口问题,在Stack Ovleflow上找到解决办法是:打开Eclipse——Windows——Preferences——Android——DDMS;
然后将Base local debugger port中的8600改为8601,然后选中Use ADBHOST,在ADBHOST value中填127.0.0.1
29.R文件报错,其中有一个String资源报错
写完demo之后发现R文件报错,clean了之后还是报错,然后打开R.java查看,发现只有一行报错,然后我仔细数了一下String资源有17个,再打开自己的value/string.xml文件,发现自己的只有16个,最后一行是只有,未定义,所以有问题,删掉这一行就行了
30.获取sqlite数据库某一字段"id"只能读取到第一行
我在写一个数据库查询方法的时候出现了只能读取一个第一个数据的情况,通过debug和对比其他语句发现,原来的在Cursor cursor = db.rawQuery(sql,null),之后没有使用
while(cursor.moveToNext()){}
方法来遍历获取cursor中的数据,而是写成了
if(cursor.moveToNext()){}
的方法,if语句只会执行一次,获取第一条数据,然后就执行下面的语句了,而while()语句只要符合括号中的条件就会继续执行。
31.启动PopupWindow报NullPointerException空指针异常
代码例子:
LayoutInflater mLayoutInflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View view = mLayoutInflater.inflate(R.layout.music_popwindow, null);
PopupWindow mPopupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
mPopupWindow.showAtLocation(findViewById(R.id.main), Gravity.RIGHT|Gravity.CENTER, 0, 0);
上面的代码是一个PopupWindow的创建过程,但是我们在button的点击事件中运行这段代码却会报空指针,原因在最后一行,showAtLocation(parent, gravity, x, y)方法出了问题,而报NullPointerException的地方正是parent即findViewById(R.id.main)为空,因为这里根本没有获得PopupWindow的parent,第二行代码的View获取了xml布局文件,parent应该在view中实例化,正确的代码应该是
mPopupWindow.showAtLocation
(view.findViewById(R.id.main)
, Gravity.RIGHT|Gravity.CENTER, 0, 0);