Android各种常见异常及处理----未完成

来源:互联网 发布:mysql时间格式 编辑:程序博客网 时间:2024/05/31 11:04

1:ArrayAdapter.add()和ArrayAdapter.remove()方法UnsupportedOperationException

原因:因为创建ArrayAdapter时候没有给他分配一个ArrayList
另外主要是因为系统官方API没有这个方法,解决不了可以考虑不用

解决方法:先创建一个ArrayList

List<CharSequence]]>planets=newArrayList<CharSequence]]>(); 
再用这个ArrayList去创建ArrayAdapter
adapter=newArrayAdapter<CharSequence]]>(context, R.array.planets_array, planets);

2:使用Fragment时遇到Binary XML file line #9: Error inflating class fragment

解决方法:

fragment加入的Activity 应该继承于 FragmentActivity


3:java.net.SocketException:Noroute

原因:wifi未打开,无路由
解决方法:wifi未打开,重新打开

4:java.net.SocketException: Permission denied (maybe missing INTERNET permission) 

原因:网络权限未添加 -- 常见的权限未添加异常
解决方法:添加网络请求权限
<uses-permission android:name="android.permission.INTERNET" /> 

5:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

原因:不能在线程中操作主线程,比如在线程中创建dialog,更新UI等都是不可以的
解决方法:在主线程中创建handler,通过handler.sendmessage()来更新UI,因为在主线程中创建的handler属于主线程,起所有handlemessage操作都是在主线程中执行

6:java.lang.IllegalArgumentException: The key must be an application-specific resource id.6

原因:应该是R.id.xxx 被替换成了1,2,3这种常用数字,id不唯一
解决方法:使用R.id.xxx

7:NetWorkOnMainThreadException

原因:在Android2.3以上版本中--网络请求需要在放在线程中,目的是为了防止阻塞UI线程,当网络请求在UI线程中时会抛出该异常
解决方法:将网络请求放在线程中

例1:放在new Thread中 new Thread(new Runnable()).start;
例2:新建内部AsyncTask类


8:java.io.FileNotFoundException: /open failed: ENOENT (No such file or directory)

原因:要打开的File不存在
解决方法:新建该文件


9:java.lang.RuntimeException: Unable to instantiate receiver xxxxxx(your receiver name):
java.lang.InstantiationException:can't instantiate class xxxxx(your receiver name) ;no empty constructor

原因:当使用BroastcastReceiver 构造函数中会传入参数时,此类BroastcastReceiver 不能在AndroidManifest.xml中声明,因为Receiver构造函数中参数会为空值,导致下列异常产生,需要动态绑定BroastReceiver
解决方法:

you receiver class =new you receiver class(getActivity().getApplicationContext());

IntentFilter intentFilter =new IntentFilter();

//添加过滤条件

intentFilter.addAction(InfoReceiver.NEWMESSAGE);

intentFilter.addAction(InfoReceiver.NEWSERVICEORDER);

getActivity().getApplicationContext().registerReceiver(your receiver, intentFilter);





原创粉丝点击