Android 推送时wmqtt.jar包引入在android 4.0下报MqttException:NULL报错的解决办法

来源:互联网 发布:spring源码深度百度云 编辑:程序博客网 时间:2024/04/30 01:36

    在我们做的项目中需要一个推送消息的功能,在网上找了下相关的技术之后(有很多分析Android推送技术优劣的文章,这里就不再多说了),决定采用IBM的MQTT协议进行推送,一来这个协议比较简单方便,二来这种方式用的比较多,网上有现成的程序可以借鉴。

    但是,根据网上的文章配置好了PHP的服务器端之后,下载了

   AndroidPushNotificationsDemo-master

这个例子程序,先是在eclipse中打开编译运行只后总是出错。网上说是wmqtt这个jar包没有导入成功,于是我又重新建了个libs文件夹把jar包又导入了一次,发现还是会出错

08-23 02:28:44.404: E/AndroidRuntime(282): java.lang.VerifyError: com.tokudu.demo.PushService 
08-23 02:28:44.404: E/AndroidRuntime(282):     at com.tokudu.demo.PushActivity$1.onClick(PushActivity.java:32) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.view.View.performClick(View.java:2408) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.view.View$PerformClick.run(View.java:8816) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.os.Handler.handleCallback(Handler.java:587) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.os.Handler.dispatchMessage(Handler.java:92) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.os.Looper.loop(Looper.java:123) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at java.lang.reflect.Method.invoke(Method.java:521) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-23 02:28:44.404: E/AndroidRuntime(282):     at dalvik.system.NativeStart.main(Native Method)
网上都是在说是因为wmqtt包导入不成功引起的,而且这个解决方法到处都是,我又重新试了好多次都不行。因为我用的是android studio来开发的,所以我又把代码转到了android studio中试了一下还是不行。通过logcat的追踪信息显示的信息

01-05 15:04:40.873  26196-26196/com.app.yiyeqianshan:push01 I/PushService﹕ Connectivity changed: connected=true
01-05 15:04:40.873  26196-26196/com.app.yiyeqianshan:push01 I/PushService﹕ Reconnecting...
01-05 15:04:40.873  26196-26196/com.app.yiyeqianshan:push01 I/PushService﹕ Connecting...
01-05 15:04:40.875  26196-26196/com.app.yiyeqianshan:push01 I/PushService﹕ MqttException: NULL XXX
01-05 15:04:40.876  26196-26196/com.app.yiyeqianshan:push01 I/PushService﹕ Rescheduling connection in 160000ms.


这说明包导入是没有问题的,只是在connet的时候抛出异常了,是包内部函数的问题。

仔细比对了我的程序和例子程序之后发现问题出在minSdkVersion=3上面。

选择Min SDK Version 低于 10 即可。

并且不要填写 Target/Max SDK Version ,

project.properties 文件中的版本控制这当前编译时调用的 android 支持包的版本。

由于我们用了fragment,最低支持版本是10,这个就没办法了。后来在网上看到了一种解决方案,就是在调用之前加上

if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

这个就OK了。问题解决。。。


0 0
原创粉丝点击