android.os.NetworkOnMainThreadException

310 阅读1分钟

这个异常产生的原因是因为不能再主线程中发送请求数据

        两种解决办法

        1.写一个子线程然后在需要执行发现送请求的位置start启动该线程

Thread thread = new Thread() {
    @Override
    public void run() {
        CommonResp<Boolean> result = MeRepairAPI.meRepair(MeRepairActivity.this, titleText, text.getText().toString());
        if(null!=result.getError()){
            Toast.makeText(mContext, result.getError(),
                    Toast.LENGTH_SHORT).show();
        }else if(null!=result.getWarning()){
            Toast.makeText(mContext, result.getWarning(),
                    Toast.LENGTH_SHORT).show();
        }else {
            finish();
        }
    }
};

\

    2.设置苛刻模式(我是这么认为的)

    两种苛刻模式,一个是线程安全的一个是虚拟机的,网上搜这两个名词会有很精细的解释以我的话来说就是停车场请了两个保安抢车偷车管不住但是可以保证停车场不乱不会因为车位打架(我说的比较通俗凑合理解一下吧)\

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()   // or .detectAll() for all detectable problems
                .penaltyLog()
                .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects()
                .detectLeakedClosableObjects()
                .penaltyLog()
                .penaltyDeath()
                .build());

\