android软件开发中经常遇到的Exception汇总及解决方法

  • 内容
  • 评论
  • 相关

android软件开发中经常遇到的Exception汇总及解决方法

相信许多搞安卓软件开发的经常会碰到一些Exception,尤其是自学或者刚开始搞安卓软件开发的朋友。面对这个情况我们往往会第一时间想到百度。这里给大家总结一下我们经常会遇到的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.Invalid project description     

导入一个Library项目时,出现了这个提示,搜索的结果是项目中.project文件中name可能是因为你的工程名不同而造成的我检查后并没有发现不同,后来想到导入Library的项目时,Library项目和导入Library的项目需要处在同一级目录下,于是将Library复制到workspace,这样就好了; 项目中的.project中的name和项目名字不一样,但确实不是这个问题,后来看一篇博文说的是因为AndroidManifest.xml文件版本不同造成的,解决办法是将项目复制到其他地方再导入即可,然后按照那篇博文上讲的将项目从workspace中复制到桌面导入,果然可以了

5.java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent

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

6.able to execute dex: Multiple dex files define Landroid/support/v4/app/ActivityCompatHoneycomb;

libs下的android-support-v4.jar重复,将android-support-v4.jar删除即可

7.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 二文件 或者重启 eclipse

8.The library 'android_xxxxxxxxx.jar' contains native libraries that will not run on the device.

在Eclipse上面设置,选择windows——preferences——android——build,取消勾选改设置页面Build Setting的第一个和第二个复选框即可。

9.java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent

sdk出现的错误,解决办法是右键项目,选择“Properties”,然后点击Java Builde Path——Order and Export,将未勾选的jar包复选框勾选确定就可以了。

10.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,关掉其中的一个即可

11.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. 

原因是使用的模拟器的分辨率太高了,已经超出了你电脑实际分辨率的尺寸

12.升级了ADT22之后报java.lang.NoClassDefFoundError错误

右键项目名称-->>Build Path-->>Configure Build Path-->>在Order and Export中选中Android Private Libraries-->>OK

最后点击Project-->>clean一下当前项目就ok了.

(如果还是没有成功的话,就选中Order and Export中所有的, 然后再clean一下.)

13.Eclipse运行项目安装时出现:Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

这个错误的字面意思就是:“安装失败,内存不足”,如果是真机出现这种情况,将手机中的app删掉几个就可以了,如果是模拟器出现这个情况,网上的答案是使用命令行:emulator -avd MyAndroid -partition-size 120

14.Caused by: java.lang.ClassNotFoundException: android.support.v4.ViewPager

一般情况下,出现这种情况下都是因为项目中缺少android-support-v4.jar或者没有引用这个jar包引起的,但是当在项目中新建libs目录,并拷贝android-support-v4.jar包到libs引用之后,这个问题还是不能解决,后在网上找到了解决办法:右键选择项目Project->Properties->Java Build Path than select Order and export,然后点击右边的TOP按钮,将android-support-v4.jar或其所在的libraries置顶,最后clean一下项目即可运行

15.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);即可。

16: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包名更正即可正常打包

17.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

18.R文件报错,其中有一个String资源报错

写完demo之后发现R文件报错,clean了之后还是报错,然后打开R.java查看,发现只有一行报错,然后我仔细数了一下String资源有17个,再打开自己的value/string.xml文件,发现自己的只有16个,最后一行是只有<string name=""></string>,未定义,所以有问题,删掉这一行就行了

19.启动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);

原文链接:http://m.myexception.cn/other/1491115.html

IT技术资料分享-个人整理自互联网,感谢原作者的分享,文章有删减,如有侵权请第一时间联系站长QQ:1539995615,我会及时进行处理。

 

上一篇: 下一篇:
关注本站微信公众号


仍未解决?点击远程协助
QQ群: 943816552