Android 遇到异常含义及解决方法整理

来源:互联网 发布:js查找数组键值 编辑:程序博客网 时间:2024/04/29 20:20
  1. Unable to find explicit activity class :
    导致原因 :有Activity 没有 在AndroidManifest.xml文件中注册
    解决办法:把 Activity添加到在AndroidManifest.xml文件中
    2 . [2013-01-30 10:49:14 - ddmlib] 您的主机中的软件放弃了一个已建立的连接。
    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)

导致原因:真机调试没有开启开发人员USB调试
解决办法: 开启开发人员USB调试

3.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{XXX.PositionActivity}: java.lang.RuntimeException: Binary XML file line #23: You must supply a layout_width attribute.

导致原因是 PositionActivity对应的布局文件XML存在语法错误
解决办法:仔细检查对应布局文件,找出引发错误的错误代码

4.发送Http请求时 android.os.NetworkOnMainThreadException异常
导致原因:异常大概意思是在主线程访问网络时出的异常。 Android在4.0之前的版本 支持在主线程中访问网络,
但是在4.0以后对这部分程序进行了优化,访问网络的代码不能写在主线程中了。
解决办法:将Http请求移到单独线程中做,然后在Application上加入StirctMode检查代码:

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());       StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectAll().penaltyLog().penaltyDeath().build());

StrictMode除了检查http请求外还可以检查硬盘读写等多种问题。

5.android数据库sqlite关闭异常 :

ERROR/Cursor(1188): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.icss/databases/resoute_list, table= resoute_list, query = SELECT id, user_name,socre, part_time ,type  FROM resoute_list ORDER BY id desc06-13 18:04:35.176: ERROR/Cursor(1188): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database objectthat was opened here

导致原因:每次查询完成后需要关闭 SQLiteDatabase 对象 databaseHelper 对象 Cursor对象,在第一次使用查询时 没有关闭 databaseHelper 对象,只关闭SQLiteDatabase 对象 和 Cursor对象,第二次(第二个Activity中查询)查询时出现此异常
解决办法:每次查询完成后需要依次关闭 Cursor对象 、databaseHelper 对象、 SQLiteDatabase 对象。
6.多次clean 项目出现:
Android: R cannot be resolved to a varia…
导致原因:自动生成的R文件被删除 或不完整
解决办法:
(1)检查Android 的SDK是否丢失需要重新下载,检查build path
(2)确保class没有import Android.R;
(3)错误class引用的layout的xml文件没有错误
(4)检查AndroidManifest.xml文件,里边的package,layout配置文件,strings.xml等的字符串全部书写正确
(5)layout的xml文件中引用的strings.xml中的字符串拼写完全正确
(6)在layout 的xml文件手写添加一个控件,看id能否在R.java中自动生成,如果不能,那很大可能就是这个layout 的xml文件有问题,查看格式是否使用正确,或者包含什么非法字符串,或者调用到了不正确的字符串,等等,可以使用排除法,挨个去掉控件,直到发现error message消失或者id能在R.java中自动生成。
(7)删掉gen文件夹,使R.java重新自动生成一次,如果不能生成,继续检查layout的xml文件是否有如上不易发觉的问题
(8)Clean project ,重新build,或者重新import project。
(9)重启eclipse
(10)重启电脑,以防Android 虚拟机的问题

Android中常见异常整理
1)异常:Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。
2、将引用的第三方包,添加进工作的build path。选中jar包->Build Path
3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:选中lib文件夹->source code
java.lang.NoClassDefFoundError
Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

(2)异常:Caused by: android.os.TransactionTooLargeException
导致原因是:Binder传输的数据太大。
如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException。
解决方法:不要将大量数据传入Binder。

(3)异常:android.database.CursorWindowAllocationException:Cursor window allocation of 2048 kb failed
导致原因:主要原因是因为使用了SimpleCursorAdapter类,其中的Cursor参数需要我们手动关闭,否则就会出现以上异常。
解决方法:cursor.close()

(4)异常:Excessive JNI global references错误的解决方案 GREF暴增
导致原因:vm对jni层的reference有个数限制,过多很造成VM aborting。因此每次在GREF增加到2000以上的时候就直接aborting了
解决方法:及时回收或关闭引用

(5)异常:android.view.WindowManager$BadTokenException: Unable to add window – token
导致原因:使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决方法:采用当前Activity的Context

(6)异常:android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
导致原因:重复安装软件,导致Sqlite3打开数据库异常
解决方法:卸载相应软件,开关机,重新安装该软件,即可以解决相关异常。

(7)异常:java.lang.NullPointerException
异常原因:使用fragment时,fragment相关布局,必须给每个view设置id,否则通过activity获得fragment的实例时会出现以上异常
解决方法:为fragment布局的每个view设置ID

(8)异常:java.util.ConcurrentModificationException(并发操作异常)
异常原因:ArrayList是非线程安全的,当同时在遍历和修改ArrayList时,就会出现该异常
解决方法:使用Vector替换ArrayList,Vector是线程安全的。Vector的缺点:大量数据操作时,由于线程安全,性能比ArrayList低

(9)异常:so库文件异常(JNI层异常)
异常原因:在Android应用层开发中,我们经常会使用so库文件。当so库文件发生异常时,我们只能在adb log中发现fatal libc这样的异常信息,仅此而已,并不能发现异常调用的逻辑关系, 这是我们就需要查看so 库异常Log信息。在Android手机的/data/tombstones 的路径下就包含了so库文件发生异常的Log信息,开发者可以查看该路径下载Log文件发现异常调用的逻辑关系

0 0
原创粉丝点击