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

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;
    }
阅读 5k
5 个回答

新开一个线程使用join等待结束处理了!
Thread th = new Thread(new Runnable(){
....
});
th.join();

三个问题:

  1. 题主不知道函数作用和用法:看文档
  2. 题主不知道函数内部实现,无法正确理解代码执行顺序逻辑:看源码
  3. 随意保持Activity引用:实在无法理解为什么很多人都这么干

Android Activity.java 源码:

    @Override
    public final void runOnUiThread(Runnable action) {
        if (Thread.currentThread() != mUiThread) {
            mHandler.post(action);
        } else {
            action.run();
        }
    }

我觉得你贴出的代码没法表现问题所在,其次使用了runOnUiThread 还是报错NetworkOnMainThreadException.

本来这个错误的意思就是在UI线程访问网络报错的,你把相关逻辑放到runOnUiThread还是UI线程,一样也会报错。根本没解决问题

新手上路,请多包涵

Rxjava 完美解決該問題。

你的getUserInfo()是否是在UI线程调用?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题