EMMessage.createSendMessage(EMMessage.Type.TXT) 创建空值

EMConversation conversation = EMChatManager.getInstance().getConversation(userName);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
这个自定义 消息,如果在 server上执行,就会报错
07-08 05:01:38.759: E/AndroidRuntime(4142): java.lang.NullPointerException
07-08 05:01:38.759: E/AndroidRuntime(4142): at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:374)
07-08 05:01:38.759: E/AndroidRuntime(4142): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:369)
07-08 05:01:38.759: E/AndroidRuntime(4142): at com.easemob.chat.EMSessionManager.getLastLoginUser(Unknown Source)
07-08 05:01:38.759: E/AndroidRuntime(4142): at com.easemob.chat.EMMessage.createSendMessage(Unknown Source)

在activity上使用 相同的接口就是ok的,请确认这个是不是需要满足一定条件才行,谢谢

共4个回复

fengbenpao

2015-07-08 14:45

仔细想想,应该是这个接口里面调用了  getDefaultSharedPreferences   由于切换到后台server的时候, 导致当前的 package变化,  所以去获取该 sharePreferences的时候,为空导致的。     请测试一下这个接口   

zhangnan

2015-07-08 15:23

在 server上执行是什么意思

fengbenpao

2015-07-08 15:53

就是我将这个接口放在Service中执行,不放在activity执行。

fengbenpao

2015-07-08 15:55

我现在想做一个功能,就是使用一个service做一个浮窗, 然后这个浮窗浮在另一个应用界面上面,点击这个浮窗,会展示出一个 联系人列表, 然后联系人直接可以使用 im通信。 然后创建消息体的时候,就报那样的错误了

zhangnan

2015-07-08 15:58

@1694:不要在service里调用

fengbenpao

2015-07-08 16:07

@104:不再service调用,我在哪里可以实现我的这个功能呢? 你们这个接口是不是可以优化啊?

zhangnan

2015-07-08 16:14

@1694:还是要确认下哪里报的空,createSendMessage点击进去看看源码

fengbenpao

2015-07-08 16:33

@104:我看不到源码吧? 你们都是打包成jar的形式了啊,所以你看看源码是不是有这样的异常情况出现?

zhangnan

2015-07-08 16:43

@1694:可以看的,大部分源码没有混淆,我和你用的是一样的jar

zhangnan

2015-07-08 16:48

@1694:如果是eclipse装个插件,或者直接用反编译的工具拖进去看

fengbenpao

2015-07-08 17:06

@104: SharedPreferences localSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.appContext); 这里报空值,应该是 EMSessionManager 这个里面传递的Context为空了导致的, 不知道什么情况下会导致这个为空值啊

zhangnan

2015-07-08 17:26

@1694:你是定位到这个context为空了吗

fengbenpao

2015-07-08 17:33

是的,07-08 11:29:11.599: E/AndroidRuntime(23223): at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:374) 07-08 11:29:11.599: E/AndroidRuntime(23223): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:369) 这里报空的话,基本上就是这个函数传递参数的时候 发生了问题导致的

fengbenpao

2015-07-08 17:37

@104:我直接在前面加上 EMChat.getInstance().init(mContext); 不会报错了,但是发送不成功,还有bug

fengbenpao

2015-07-10 17:06

@104:广播搞定

fengbenpao

2015-07-08 15:52

就是我将这个接口放在Service中执行,不放在activity执行。

lizg

2015-07-08 16:05

@fengbenpao 不要在service里调用
点击此处继续提问与开发者们互动

申请试用

提交后工作人员会尽快与您联系进行功能演示
技术咨询已转移到管理后台,请先登录

即时通讯云使用者请在应用详情页面咨询
客服云使用者请进入管理员模式咨询

×

在线咨询

电话咨询

技术咨询

免费试用