android 使用了runOnUiThread 还是报错NetworkOnMainThreadException,代码如下:

0 0 java android
柚子先生
柚子先生

声望值:172 0人

2019-03-11 09:07:33 提问

关注 0关注

收藏 0收藏, 228浏览

private EaseUser getUserInfo(final String username){
        // To get instance of EaseUser, here we get it from the user list in memory
        // You'd better cache it if you get it from your server
        String curUser = EMClient.getInstance().getCurrentUser();
        if(username==null||curUser==null)return null;
        EaseUser user = null;
    /*    if(username.equals(curUser))
            return getUserProfileManager().getCurrentUserInfo();*/
        user = getContactList().get(username);
        if(user == null && getRobotList() != null){
            user = getRobotList().get(username);
        }

        // if user is not in your contacts, set inital letter for him/her
        if(user == null){
            user = new EaseUser(username);
            EaseCommonUtils.setUserInitialLetter(user);
            final UserBean.Account[] account = {null};
            MyApplication.getInstance().getCurrentActivity().runOnUiThread(new Runnable() {
                public void run() {
                    account[0] =  AccountLoader.getUser(username);
                }
            });
            if(account[0] !=null) {
                user = new EaseUser(account[0].getId());
                user.setNickname(account[0].getNickname());
                user.setAvatar(account[0].getAvatar());
                userDao.saveContact(user);
            }

        }
        return user;
    }
请先 登录 后评论

5个回答

  • Python//孤狼134声望 2018-09-25 09:25

    我觉得你贴出的代码没法表现问题所在,其次使用了runOnUiThread 还是报错NetworkOnMainThreadException. 本来这个错误的意思就是在UI线程访问网络报错的,你把相关逻辑放到runOnUiThread还是UI线程,一样也会报错。根本没解决问题
    请先 登录 后评论
  • 满庭枫ツ172声望 2018-09-25 09:25

    三个问题: 题主不知道函数作用和用法:看文档 题主不知道函数内部实现,无法正确理解代码执行顺序逻辑:看源码 随意保持Activity引用:实在无法理解为什么很多人都这么干 Android Activity.java 源码: @Override public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); } }
    请先 登录 后评论
  • 疯狂Clark116声望 2018-09-25 09:25

    Rxjava 完美解決該問題。
    请先 登录 后评论
  • 飞翔的熊bla45声望 2018-09-25 09:25

    新开一个线程使用join等待结束处理了!Thread th = new Thread(new Runnable(){....});th.join();
    请先 登录 后评论
  • 路漫猿兮54声望 2018-09-25 09:25

    你的getUserInfo()是否是在UI线程调用?
    请先 登录 后评论

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问