在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  Android/ android 使用了runOnUiThread 還是報(bào)錯(cuò)NetworkOnMa

android 使用了runOnUiThread 還是報(bào)錯(cuò)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;
    }
回答
編輯回答
情殺

Rxjava 完美解決該問(wèn)題。

2017年7月26日 05:12
編輯回答
純妹

三個(gè)問(wèn)題:

  1. 題主不知道函數(shù)作用和用法:看文檔
  2. 題主不知道函數(shù)內(nèi)部實(shí)現(xiàn),無(wú)法正確理解代碼執(zhí)行順序邏輯:看源碼
  3. 隨意保持Activity引用:實(shí)在無(wú)法理解為什么很多人都這么干

Android Activity.java 源碼:

    @Override
    public final void runOnUiThread(Runnable action) {
        if (Thread.currentThread() != mUiThread) {
            mHandler.post(action);
        } else {
            action.run();
        }
    }
2018年5月26日 17:20
編輯回答
扯不斷

你的getUserInfo()是否是在UI線程調(diào)用?

2017年1月3日 04:16
編輯回答
懷中人

我覺(jué)得你貼出的代碼沒(méi)法表現(xiàn)問(wèn)題所在,其次使用了runOnUiThread 還是報(bào)錯(cuò)NetworkOnMainThreadException.

本來(lái)這個(gè)錯(cuò)誤的意思就是在UI線程訪問(wèn)網(wǎng)絡(luò)報(bào)錯(cuò)的,你把相關(guān)邏輯放到runOnUiThread還是UI線程,一樣也會(huì)報(bào)錯(cuò)。根本沒(méi)解決問(wèn)題

2017年4月26日 11:07
編輯回答
眼雜

新開(kāi)一個(gè)線程使用join等待結(jié)束處理了!
Thread th = new Thread(new Runnable(){
....
});
th.join();

2017年5月2日 15:56