android开发中遇到的异常及解决方法

每次运行项目,可能因为粗心或者哪一行代码没有调用,会导致项目不能运行,出现异常。

以下就是我总结的各种异常,会一直更新。


1. Unable to find explicit activity class   :

导致原因 :有Activity 没有 在AndroidManifest.xml文件中注册
解决办法:在AndroidManifest.xml文件中注册Activity

 

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)
 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:837)
 at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
 at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
 at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
 at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
 at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)
  导致原因:模拟器没有开启或者真机没有开启开发者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.


导致原因:Activity对应的布局文件XML存在语法错误

解决办法:仔细检查对应布局文件,找出引发错误的错误代码,进行改正

 

4.发送Http请求时  android.os.NetworkOnMainThreadException异常

导致原因:在主线程访问网络时出的异常。 Android在4.0之前的版本 支持在主线程中访问网络,
但是在4.0以后对这部分程序进行了优化,访问网络的代码不能写在主线程中了。

解决办法:在要使用HTTP请求的Activity的OnCreate方法中加入:
       StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
       StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectAll().penaltyLog().penaltyDeath().build());

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 desc

12-13 18:04:35.176: ERROR/Cursor(1188): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object

that 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 虚拟机的问题

7.Java.lang.NullPointerException

导致原因:项目出现空指针异常是最常见的,一般都是上下文,或者控件没有传进来,list集合可能是空之类

解决方法:elipse和studio一般都会指明哪一行有空指针,仔细找找,需要的对象有没有传进来


阅读更多

没有更多推荐了,返回首页