默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK在子线程里面new handler报错
阅读(42335) | 评论(5 收藏 淘帖1
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                                                                           at android.os.Handler.<init>(Handler.java:209)
                                                                           at android.os.Handler.<init>(Handler.java:123)
                                                                           at net.openmob.mobileimsdk.android.core.QoS4SendDaemon.init(QoS4SendDaemon.java:135)
                                                                           at net.openmob.mobileimsdk.android.core.QoS4SendDaemon.<init>(QoS4SendDaemon.java:130)
                                                                           at net.openmob.mobileimsdk.android.core.QoS4SendDaemon.getInstance(QoS4SendDaemon.java:122)
                                                                           at net.openmob.mobileimsdk.android.core.LocalUDPDataSender.sendCommonData(LocalUDPDataSender.java:219)
                                                                           at net.openmob.mobileimsdk.android.core.LocalUDPDataSender$SendCommonDataAsync.doInBackground(LocalUDPDataSender.java:370)
                                                                           at net.openmob.mobileimsdk.android.core.LocalUDPDataSender$SendCommonDataAsync.doInBackground(LocalUDPDataSender.java:1)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                           at java.lang.Thread.run(Thread.java:818)

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:微信朋友圈千亿访问量背后的技术挑战和实践总结下一篇:报错code返回3

本帖已收录至以下技术专辑

推荐方案
评论 5
你的targetSdkVersion设置的是多少?手机的具体android版本呢?更重要的是,你的代码是怎么写的,完整贴出来

我猜测是你的代码用的不对,因为客户端与MobileIMSDK服务端连接的建立是通过new LocalUDPDataSender.SendLoginDataAsync(..)实现的,而在此之前,就调用sendDataAsyc(或sendData)方法是没有意义的,因为网络连接都没有建立,send是不成功的,且一些基础性的初始化也没有完成,所以就出现了你看到这个错误的时机和情况

理解一下Demo,然后按照Demo里为你的演示的那样使用,就不会有任何问题。完整的IM通信框架是一整个算法的合体,并非数据随意的就能从A端到B端这么简单,不按照算法的逻辑来使用,肯定会有问题,总之,请先理解了demo后再动手。

不信你试下看看MobileIMSDK的官方Demo的代码执行会不会出现这种情况(可以在线安装),或者看看基于MobileIMSDK的全功能IM RainbowChat(可以在线安装和体验),它们是不会出现你说的情况的,用的跟你是同一个东西。
服务端使用局域网ip,android 端 与服务端不在同一个局域网。 使用 LocalUDPDataSender.SendLoginDataAsync  登录后  log 所有信息                                                            05-11 18:21:14.808 815-815/com.example.itsnice.myapplication D/IMClientManager: 登陆/连接信息已成功发出!
05-11 18:21:14.808 815-1196/com.example.itsnice.myapplication D/LocalUDPDataReciever: 【IMCORE】本地UDP端口侦听中,端口=7801...
05-11 18:21:14.808 815-1196/com.example.itsnice.myapplication D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==true,直接返回本地socket引用哦。
05-11 18:21:14.811 815-828/com.example.itsnice.myapplication I/zygote64: Do partial code cache collection, code=252KB, data=135KB[img]file:///C:\Users\Itsnice\AppData\Roaming\Tencent\Users\1042010578\QQ\WinTemp\RichOle\R4[GCX$3V1CIVHHSXU67_3Q. 没有任何回调log 导致 send 消息方法报错。 且 boolean connectedToServer = ClientCoreSDK.getInstance().isConnectedToServer() [size=17.0667px]结果为ture 怎么知道连接是否正常?以至于保证 new LocalUDPDataSender.SendCommonDataAsync 不出现上述错误   本地网络没有任何问题

QQ图片20180511183520.png (87.7 KB, 下载次数: 2603)

QQ图片20180511183520.png
引用:itsnice 发表于 2018-05-11 18:31
服务端使用局域网ip,android 端 与服务端不在同一个局域网。 使用 LocalUDPDataSender.SendLoginDataAsync ...

不管在什么网,网络通信程序的前提条件是必须双向能够互通,即:
1)客户端能Ping的通服务器:andriod端的ping工具可以从这里下载:http://www.52im.net/thread-610-1-2.html
2)服务端能ping通客户端:你打开你的手机,查看你手机的ip地址,直接服务器的命令行下ping。

以下2个方向的ping,你把ping结果贴出来,我认为你这两边的网是不通的
引用:JackJiang 发表于 2018-05-11 20:05
不管在什么网,网络通信程序的前提条件是必须双向能够互通,即:
1)客户端能Ping的通服务器:andriod端 ...

是的,是ping  不通的服务器ip的  100% 丢包 。
引用:itsnice 发表于 2018-05-14 13:30
是的,是ping  不通的服务器ip的  100% 丢包 。

很多公司的内网wifi和有线网不是一个网段,搞的手机跟内网服务器不通,你让你们的网络解决一下
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部