鍍金池/ 問答/Java  Android/ android 使用了runOnUiThread 還是報錯NetworkOnMa

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;
    }
回答
編輯回答
情殺

Rxjava 完美解決該問題。

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

三個問題:

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

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
編輯回答
懷中人

我覺得你貼出的代碼沒法表現(xiàn)問題所在,其次使用了runOnUiThread 還是報錯NetworkOnMainThreadException.

本來這個錯誤的意思就是在UI線程訪問網(wǎng)絡(luò)報錯的,你把相關(guān)邏輯放到runOnUiThread還是UI線程,一樣也會報錯。根本沒解決問題

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

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

2017年5月2日 15:56