`

经常遇到的Exception以及解决办法

 
阅读更多


1.Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ButtonClassCastException:类型转换错误,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.lang.NullPointerException
JAVA开发和Android开发最常遇到的异常(没有之一),每一个学JAVA的人都对他恨之入骨,由于其可能导致的原因众多,我就讲讲我遇到的情况,我是因为用map获取一个不存在的key导致爆出空指针异常

10.java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent
android 植入友盟/广告异常, ADT18对引用的jar有要求,要求jar包要放到项目下的libs里才可以找到,否则apk不会包含该jar包。


11.ble 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 (系统找不到指定的文件。)
1、 
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的第一个和第二个复选框即可
如图所示: <ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: Tahoma, 'Microsoft Yahei', Simsun;"> 

15.java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent
办添加友盟sdk出现的错误,解决办法是右键项目,选择“Properties”,然后点击Java Builde Path——Order and Export,将未勾选的jar包复选框勾选确定即可
如图所示: <ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: Tahoma, 'Microsoft Yahei', Simsun;"> 

16.LogCat无法输出日志信息
将LogCat关掉重新打开即可,点击LogCat右边的叉号即可关闭LogCat,然后点击Windows——Show View,看看有没有LogCat,有的话就选择,LogCat就会弹出,没有的话,点击other,在弹出框中点击Android文件夹,选择LogCat即可
如果重启LogCat还不行的话,可以重启Eclipse


17.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之后),困扰了我很久,终于找到了解决办法
<ignore_js_op style="word-wrap: break-word;">   控制台提示错误为:[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包都按照这样的格式写
<ignore_js_op style="word-wrap: break-word;"> 
最后就可以正常打包了


26:java.io.IOException: Can't read [C:\Users\admin\Desktop\xxxx\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
<ignore_js_op style="word-wrap: break-word;"> 
原因是本机内存不够,而eclipse方法区(Perm Gen)占用内存太多的缘故解决办法是找到eclipse的解压目录中的eclipse.ini文件打开编辑,
如下图
<ignore_js_op style="word-wrap: break-word;"> 另一个办法是在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个,最后一行是只有<string name=""></string>,未定义,所以有问题,删掉这一行就行了

30.获取sqlite数据库某一字段"id"只能读取到第一行
我在写一个数据库查询方法的时候出现了只能读取一个第一个数据的情况,通过debug和对比其他语句发现,原来的在Cursor cursor = db.rawQuery(sql,null),之后没有使用while(cursor.moveToNext()){}方法来遍历获取cursor中的数据,而是写成了if(cursor.moveToNext()){}的方法,if语句只会执行一次,获取第一条数据,然后就执行下面的语句了,而while()语句只要符合括号中的条件就会继续执行。

31.启动PopupWindow报NullPointerException空指针异常
代码例子:

  1. LayoutInflater mLayoutInflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);  
  2. View view = mLayoutInflater.inflate(R.layout.music_popwindow, null);  
  3. PopupWindow mPopupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
  4. 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);

分享到:
评论

相关推荐

    关于Unhandled event loop exception No more handles的两种解决方案

    在使用eclipse的时候,有时候会弹出一个方框,里面的内容是Unhandled ...本人就是遇到这样的问题,百度了大量资料没有解决,后来自己摸索整理了两套方法,写在附件里,供大家使用,希望能帮大家解决这个棘手的问题。

    kernel panic - not syncing : fatal exception

    屏幕上显示: Fatal exception:panic in 5 seconds kernel panic - not ...这类问题的解决办法就是先查看错误代码中的信息,找到错误所指向的硬件,将其禁用。系统启动后,安装好相应的驱动,再启用该硬件即可。

    Python中遇到的小问题及解决方法汇总

    本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习python。 一、Python的异常处理 因为想到自己不断尝试写小程序的话会用到抛出异常信息来判断哪里出现了问题: usage: raise ...

    AES加密出现InvalidKeyException之Illegal key size解决方案

    解决办法也很简单: 将下面链接中的jar包下载下来,替换jdk 与jre下两个jar包:local_policy.jar和US_export_policy.jar即可。 jdk对应jar包的路径:D:\Java\jdk1.7.0_25\jre\lib\security jre对应jar包的路径:D:\...

    Hibernate错误及解决办法集合

    本人做系统时遇到的一些Hibernate问题及解决方案。

    启动监听程序遇到的问题及解决方法

    [oracle@localhost response]$ netca /silent /responsefile netca.rsp 报错

    学习AXIS2遇到的一个问题与解决

    本人在学习Axis2过程中,使用axis2提供的两个myeclipse插件时,生成代码最后点“完成”时,老出现java_lang_reflect_InvocationTargetException错误。弄了两天时间,终于找到解决的办法。

    arthas-boot.jar

    当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线...

    arthas-idea-plugin.zip

    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上...

    PHP连接数据库时遇到的两个错误的解决方案

    2、我的解决方案 1)描述 php配置文件中以下这一行的分号去掉 ; extension=mysqli 2)细节 vim /etc/php/php.ini 找到下面这一行并将前面的分号注释去掉,保存退出。 ; extension=mysqli 二、第二个问题 1、问题描述...

    arthas教程详解

    当你遇到以下类似问题而束手无策时, Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线...

    arthas-boot.jar(阿尔萨斯)

    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 ...

    arthas-master.zip

    Arthas 是Alibaba开源的Java诊断工具,当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?...

    是Alibaba开源的Java诊断工具

    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 ...

    arthas 3.3.6

    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上...

    nachos-Lab6实习报告.doc

    " " "系统调用实习报告 " " " " " 目录 内容一:总体概述 3 内容二:任务完成情况 3 任务完成列表(Y/N) 3 具体Exercise的完成情况 3 内容三:遇到的困难以及解决方法 16 内容四:收获及感想 16 内容五:对课程的...

    arthas.png

    当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法...

    PHP错误Warning: Cannot modify header information – headers already sent by解决方法

    今天在测试以下代码时遇到该错误: 复制代码 代码如下: session_start(); $_SESSION[‘username’]=$username; ...[removed]”;...看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096

    Angularjs中date过滤器失效的问题及解决方法

    解决方法:在后端处理要传的数据,将里面的时间转为时间戳即可(下面贴我百度到的) /** * 时间转时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateF

Global site tag (gtag.js) - Google Analytics