Android中传送序列化对象出现的ClassNotFoundException解决办法
最近在做课程设计,老师要求是基于Android上的wifi通信的,之前没事的时候写过一个套接字编程的,完成了一个类似于聊天工具的功能。于是就想着改改,凑合着用用交上去。没想到在写的时候发现了一个很让人摸不着头脑的异常:ClassNotFoundException。
先说一下编码之前的思路,我想在PC上做服务端,在Android上做客户端,同时,在两端封装了RequestObject,ResponseObject等序列化的对象,用于在服务端和客户端之前传递请求和响应对象(通过ObjectInputStream和ObjectOutputStream),如下项目结构,可是在传送对象的时候发现了RequestObject出现了ClassNotFoundException,然后就直接无语中,明明服务端和客户端的RequestObject等用于传递进对象流的对象都是一模一样的,没道理找不到类啊。
经过一番尝试未果,索性把两个.java文件中唯一不一样的一行改掉,即为import xxx.xxx.xxx,我将两个项目中有关传递信息的model包的包名改为一样的。果然测试通过了,可能识别这种对象的时候,包名也是一个必要的因素吧。
问题虽然解决了,但是总觉得不方便,因为如果服务端这边的序列化对象要更改信息,势必客户端这边的对象也要改,同一次修改缺要改两遍信息,而且还很容易混淆,于是我又做了如下处理:新建了一个项目,用于保存有关任何需要传递的序列化对象,将这个项目导出.jar文件,再作为外部jar文件导入至客户端和服务端的项目里,这样就省去了很多工作,在正式往项目里添加操作之前,做了一个demo测试。
建立3个项目,分别是Android客户端,需要传递的数据,PC的服务端。分别编写好各个代码
?
???测试效果如下:
?第一次写这么长的博客,用来记录自己学习路程的同时,也希望能帮助遇到同样问题的朋友。写的不好的地方欢迎朋友们提意见,写的有错的地方也希望各位大神能够不吝赐教。还是那句话,文明看帖,欢迎轻拍。
欢迎转载,转载请注明出处:
http://waynehu16.iteye.com/blog/1530760