android中使用smack库时,遇到错误:java.lang.NullPointerException

来源:互联网 发布:java代码整洁之道 编辑:程序博客网 时间:2024/06/05 20:19

参考网站:

http://www.cnblogs.com/windy-love/p/3184304.html

http://stackoverflow.com/questions/5910219/getsearchform-returns-null-when-using-usersearch-in-xmpp-with-asmack

http://community.igniterealtime.org/message/201866#201866

http://blog.csdn.net/wangyi_lin/article/details/6953606


在jitsi-android中直接使用smack库中的类时,运行时会遇到java.lang.NullPointerException的错误。查阅上述网站后,猜测原因大概与之相同。

问题分析摘要:

国外网站解释,这对asmack是个全局存在的问题。原因就是通常在普通版本smack的META-INF目录下的smack.providers文件,在android中不能自动加载,因为jar包的打包方式。因此所以的providers都必须手动加载。

smack中:每个provider都会有一个静态函数,将自己注册到ProviderManager中。此注册通常是在class load时完成,但是在android中class load似乎没有正常工作,因此没有provider被注册到ProviderManager中


注意:

在Android中可以动态加载,但无法像Java中那样方便动态加载jar      

原因:Android的虚拟机(Dalvik VM)是不认识Java打出jar的byte code,需要通过dx工具来优化转换成Dalvik byte code才行。

refer to:

http://www.cnblogs.com/developerY/archive/2013/04/18/3027997.html

http://blog.csdn.net/czh0766/article/details/6736826

http://www.cnblogs.com/franksunny/archive/2011/09/27/2193085.html

http://www.cnblogs.com/over140/archive/2011/11/23/2259367.html