精华内容
下载资源
问答
  • Easy Connect连接网络请求异常

    千次阅读 2020-09-04 08:48:42
    求助各位大佬! 笔记本使用Easy Connect客户端连接其他高校VPN的时候,页面报错 网络请求异常,请稍后重试,但笔记本的网络状态挺好的 也灭有连接其他VPN,这个是什么原因导致的?

    求助各位大佬!
    笔记本使用Easy Connect客户端连接其他高校VPN的时候,页面报错
    网络请求异常,请稍后重试,但笔记本的网络状态挺好的 也灭有连接其他VPN,这个是什么原因导致的?
    在这里插入图片描述

    展开全文
  • 工具类是对Retrofit2+Rxjava2网络请求异常统一封装处理,将onError(Throwable e)中得异常转化成具体的错误信息。除了提示用户以外,还方便开发者准确定位Bug的所在。
  • iOS10 网络请求异常

    千次阅读 2016-11-07 16:48:38
    [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace: [x86_64] libnetcore-856.1.8 0 libsystem_network.dylib 0x000000010badf80e __nw_creat
    [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace:
    
    [x86_64] libnetcore-856.1.8
    
    0 libsystem_network.dylib 0x000000010badf80e __nw_create_backtrace_string + 123
    
    1 libnetwork.dylib 0x000000010c6e4194 nw_socket_add_input_handler + 3002
    
    2 libnetwork.dylib 0x000000010c6c1db8 nw_endpoint_flow_attach_protocols + 3768
    
    3 libnetwork.dylib 0x000000010c6c0dd5 nw_endpoint_flow_setup_socket + 563
    
    4 libnetwork.dylib 0x000000010c6bfb34 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612
    
    5 libnetwork.dylib 0x000000010c6dad11 nw_endpoint_handler_path_change + 1261
    
    6 libnetwork.dylib 0x000000010c6da740 nw_endpoint_handler_start + 570
    
    7 libnetwork.dylib 0x000000010c6f2003 nw_endpoint_resolver_start_next_child + 2240
    
    8 libdispatch.dylib 0x000000


    解决方法就是

    在xcode,进入菜单product-scheme-edit scheme 


    添加环境变量 OS_ACTIVITY_MODE 为 disable 即可,如下图





    展开全文
  • 网络请求中有很多常见的错误,我们可以通过Toast弹出消息通知用户具体的异常以及加载对应的UI界面。除此之外,通过具体的异常信息,方便我们及时的排查项目中的BUG。那么我们就需要知道具体的错误是什么。Retrof...

    Retrofit2+Rxjava作为主流的网络请求框架,本文主要讲解针对网络请求的错误信息进行一次封装,方便我们根据返回的状态合理地在UI界面进行显示,同时如何主动取消网络请求的订阅。

    网络请求中有很多常见的错误,我们可以通过Toast弹出消息通知用户具体的异常以及加载对应的UI界面。除此之外,通过具体的异常信息,方便我们及时的排查项目中的BUG。那么我们就需要知道具体的错误是什么。Retrofit2回调方法有四种,分别是:onSubscribe(),onNext()、onError()和onComplete(),他们的意思分别是:订阅、下一步、失败和完成。通常我们在onNext()和onError()方法中处理成功和失败的操作。onNext()中获取到数据的返回进行展示,那么在onError()中只给我们一个Throwable,那么我们该如何处理呢?

    一下是一个简单的网络请求,先看代码:

    private void initData() {
            userNetWork.toGetLunBoTuEntity(new Observer<LunBoTuEntity>() {
                @Override
                public void onSubscribe(Disposable d) {
                    //如果想手动取消这个网络请求
                    //d.dispose();
                }
    
                @Override
                public void onNext(LunBoTuEntity lunBoTuEntity) {
                    if (lunBoTuEntity.isSuccess()) {
                        Toast.makeText(MainActivity.this, "网络请求成功", Toast.LENGTH_SHORT).show();
                    } else {
    
                    }
                }
    
                @Override
                public void onError(Throwable e) {
                    //对网络请求错误统一封装处理
                    String errorMessage = ErrorHandler.errorMessage(e);
                    Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onComplete() {
    
                }
            });
        }

    在这里可以注意到以下一行代码,这个就是本文的重点,对网络请求返回的错误做统一处理:

    //对网络请求错误统一封装处理
    String errorMessage = ErrorHandler.errorMessage(e);

    要对返回错误作统一处理,那么就要封装返回数据及异常类型判断,这就要从服务器返回的数据格式说起了。我们一般请求的返回都是像下面这样

    {
       "Success": false
       "code":"200",
       "message":"Successd!",
       "data":{
             "name":"小明"
              "age":3
              "date":"2017-05-12"
       }
    }

    服务器端返回数据约定俗称就是大概以上的格式。可能具体的code码表示的含义不一样,这个可以与服务器端人员交流,灵活变化,对于上述的服务器返回数据我们要对errorCode做出一些判断,可以根据自己的业务需要做出不同的操作:

    public static String errorMessage(Throwable e) {
            TradeSimpleResult errBody = ErrorHandler.handle(e);
            if (errBody != null) {
                final Activity activity = AppManager.topActivity();
                String errorCode = errBody.getErrorInfo().getErrorCode();
                if (activity != null && !activity.isDestroyed()) {
                    if ("401".equals(errorCode)) {
                        //token失效了
                    } else if ("402".equals(errorCode)) {
    
                    } else if ("403".equals(errorCode)) {
    
                    } else if ("404".equals(errorCode)) {
    
                    }else if ("500".equals(errorCode)){
    
                    }
                }
                return errBody.getErrorInfo().getErrorMessage();
            }
            return "";
        }

    对服务器返回数据我们要对code做出一些判断,code不为200(假设200表示请求网络成功)就抛出异常。所以我们新建一个TradeSimpleResult类,对应上面的数据结构。

    下面这个实体类这算是所有实体的一个基类,data可以为任何数据类型。然后要对返回结果进行预处理,新建一个ExceptionHandle。预处理无非就是根据返回数据用Gson进行解析,Success若为true则正常处理,否则抛出异常让ExceptionHandle进一步处理,判断异常为何种异常。

    以下为TradeSimpleResult实体类的基类:

    public class TradeSimpleResult implements Serializable{
    
      /**
       * Success : false
       * StatusCode : 500
       * Message : 处理失败
       * ErrorInfo : {"ErrorMessage":"请输入真实的身份证姓名信息","ErrorCode":"-1"}
       */
    
      private boolean Success;
      private int StatusCode;
      private String Message;
      private ErrorInfoBean ErrorInfo;
    
      public boolean isSuccess() {
        return Success;
      }
    
      public void setSuccess(boolean Success) {
        this.Success = Success;
      }
    
      public int getStatusCode() {
        return StatusCode;
      }
    
      public void setStatusCode(int StatusCode) {
        this.StatusCode = StatusCode;
      }
    
      public String getMessage() {
        return Message;
      }
    
      public void setMessage(String Message) {
        this.Message = Message;
      }
    
      public ErrorInfoBean getErrorInfo() {
        return ErrorInfo;
      }
    
      public void setErrorInfo(ErrorInfoBean ErrorInfo) {
        this.ErrorInfo = ErrorInfo;
      }
    
      public static class ErrorInfoBean {
        /**
         * ErrorMessage : 请输入真实的身份证姓名信息
         * ErrorCode : -1
         */
    
        private String ErrorMessage;
        private String ErrorCode;
    
        public String getErrorMessage() {
          return ErrorMessage;
        }
    
        public void setErrorMessage(String ErrorMessage) {
          this.ErrorMessage = ErrorMessage;
        }
    
        public String getErrorCode() {
          return ErrorCode;
        }
    
        public void setErrorCode(String ErrorCode) {
          this.ErrorCode = ErrorCode;
        }
      }
    }

    那么实体类的基类我们也封装好了,就来看看具体封装的ErrorHandler的代码操作:

    public class ErrorHandler {
        private static String data = "{\"Success\": false,\"StatusCode\": 500,\"Message\": \"处理失败\", \"ErrorInfo\": {\"ErrorMessage\": \"网络请求错误\",\"ErrorCode\": \"404\" },\"Result\": null}";
    
        public static TradeSimpleResult handle(Throwable throwable) {
            if (throwable instanceof HttpException) {
                HttpException error = (HttpException) throwable;
                try {
                    String string = error.response().errorBody().string();
                    if (isJSONValid(string)) {
                        return new Gson().fromJson(string, TradeSimpleResult.class);
                    } else {
                        return new Gson().fromJson(data, TradeSimpleResult.class);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            } else {
                throwable.printStackTrace();
                return null;
            }
        }
    
        public static String errorMessage(Throwable e) {
            TradeSimpleResult errBody = ErrorHandler.handle(e);
            if (errBody != null) {
                final Activity activity = AppManager.topActivity();
                String errorCode = errBody.getErrorInfo().getErrorCode();
                if (activity != null && !activity.isDestroyed()) {
                    if ("401".equals(errorCode)) {
                        //token失效了
    
                    } else if ("402".equals(errorCode)) {
    
                    } else if ("403".equals(errorCode)) {
    
                    } else if ("404".equals(errorCode)) {
    
                    }else if ("500".equals(errorCode)){
    
                    }
                }
                return errBody.getErrorInfo().getErrorMessage();
            }
            return "";
        }
    
        public final static boolean isJSONValid(String jsonInString) {
            try {
                return true;
            } catch (Exception e) {
                return false;
            }
        }
    
    
    }

    需要注意的是以上操作需要用到Gson对数据进行json格式的解析,那么到现在为止,网络请求的错误返回的封装处理就做完了,使用的话,直接在onError(Throwable  e)的方法中String errorMessage = ErrorHandler.errorMessage(e);就可以拿到具体的错误信息了。

    源码下载地址:https://download.csdn.net/download/weitao_666/11116700

    展开全文
  • Android9.0 http网络请求异常解决办法

    千次阅读 2020-02-17 21:28:54
    Android9.0 http网络请求异常解决办法 前言 2018年 8 月 7 日,Google正式发布 Android 9.0 正式版系统,并宣布系统版本 Android P 被正式命名为代号“Pie”。 Google表示,为保证用户数据和设备的安全,针对Android...

    Android9.0 http网络请求异常解决办法

    前言

    2018年 8 月 7 日,Google正式发布 Android 9.0 正式版系统,并宣布系统版本 Android P 被正式命名为代号“Pie”。
    为保证用户数据和设备的安全,针对Android P 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
    因此运行 Android P 系统的应用的请求是 htttp 请求,而非 https,系统就会禁止当前应用进行该请求,而https 不受影响。

    在Android P 使用HttpUrlConnection进行http请求会出现以下异常:

    W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
    

    使用OKHttp请求则出现:

    java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy
    
    解决方法:
    1. 使用https请求
      网站要实现https访问,首选你需要申请一张SSL证书,然后将SSL证书部署到服务器端,开启443端口,就可以实现https访问了。

    2. targetSdkVersion版本降到27以下

    3. 修改AndroidManifest.xml文件
      在AndroidManifest.xml的application 中加入一条属性

    android:usesCleartextTraffic="true" 
    

    在这里插入图片描述android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。
    当属性设置为“ false”时,平台组件将拒绝应用程序使用明文流量的请求,所以将属性改为“true”,这样再使用http协议进行网络请求时系统就不会出现异常了,从系统安全性考虑,最好让服务端将接口的http全部改成https这样既保证了传输安全性,问题也完美解决了。

    展开全文
  • js捕捉网络请求异常

    千次阅读 2018-04-19 17:37:00
    一.try,catch try{内容是异步的,同步捕捉错误无效} async onSaveMaterial(params, type) { ... let res = await fetch('请求接口路径') if (res.code === 0) { alert('ok!') } }catch(error...
  • Python requests库网络请求异常处理

    千次阅读 2017-12-13 11:37:01
    from requests import exceptions def params_request(): # 通过exceptions异常来判断请求是否成功 try: t1 = time.time() response = requests.get(build_url('users/HuYaming520'),timeout=0.1) ...
  • app里面的网络请求是通过协程+okhttp来实现的,但是没有做网络异常处理(域名无法解析、502错误等等一系列),导致程序奔溃 2尝试 因为app基本上做好了,外面有大几十个地方调用,然后又有不同...
  • Android P/9.0 http网络请求异常

    千次阅读 2019-10-08 17:32:02
    异常原因 Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的...
  • Volley的异常列表: AuthFailureError:如果在做一个HTTP的身份验证,可能会发生这个错误。 NetworkError:Socket关闭,服务器宕机,DNS错误都会产生这个错误。 NoConnectionError:和NetworkError类似,这个是...
  • 一,问题描述:项目中使用的是Rxjava1.x+和retrofit2.x+搭建的网络请求框架。向后端请求数据时,由于服务器未开启,出现服务器连接异常,这是控制台输出的异常日志。这个时候rxjava会调用onError(Throwable e)方法,...
  • 该异常回调中,我们拿不到网络请求url等数据,只能拿到Throwable对象。 使用场景 异常统一处理,但异常回调中无法区分哪一个接口网络请求出现异常了。例如一个界面有多个接口,其中某个接口请求出现异常了,在...
  • volley的发布让网络请求也变得十分便利,但是我们通常懒得很想用一两句代码实现一个网络请求,其实你再经过封装就可以做到的。还有就是实际开发当中,我们会常常遇到很多异常情况,如网络异常、超时异常等等,那么...
  • 网络对接出现请求异常的处理方法

    万次阅读 2018-06-25 19:44:59
    下面文档来源于网络,总姐的比较好,项目中也是这样使用的 1.增加超时时间 假设A系统有个方法methodA,会调用B系统的methodB这个http接口,如果mehodA不追求超快的响应速度,那么你在调用methodB这个http接口时...
  • 文章目录Dio相关封装开始get请求post请求post Form表单异常处理Cookie管理添加拦截器下载文件取消请求Https证书校验调用示例完整代码 之所以封装,千言万语汇成一句话:方便使用。 Dio相关 dio是一个强大的Dart ...
  • 异常处理Retrofit本身会抛出HttpException,Gson解析会抛出解析异常, 此外我们还应该处理与服务器约定好的“异常”,即上一篇提到的返回数据中result字段值不会0的情况这里要先解决一个问题,就是Gson构建的对象,...
  • Android Retrofit取消请求异常分析

    千次阅读 2018-05-02 11:17:48
     首先我们在封装网络请求的时候会遇到activity等视图已经关闭,然而网络请求并没有关闭的现象,毕竟网络请求为异步处理和加载,不处理就会造成异常。那么接下来我们就需要管理和处理这个现象,那么怎么处理呢,请...
  • 请求异常总结

    千次阅读 2018-05-17 01:16:21
    1.400 Tomcat:提示 400:The request sent by the client was syntactically incorrect 浏览器提示: ...因为项目中使用了nginx 特意查询nginx中400 (Bad Request),结果是可能请求头过大...
  • 场景: 在winform窗体里进行... 可以进行网络请求并返回数据,但是在winform窗体关闭时服务端出现了异常: Exception happened during processing of request from ('127.0.0.1', 63951) Traceback (most rec...
  • 我们知道不少朋友在上网的时候,会遇到网络请求超时的情况,那造成网络请求超时的原因是什么呢?网络请求超时就是在程序默认的等待时间内没有得到服务器的响应.跟着小编一起来看看请求超时解决方法。网络请求超时的原因...
  • 前面文章介绍了一些kotlin协程和retorfit结合进行网络请求的基础,但是如果在前面的demo执行的过程中,我们断开手机网络,会发生什么?没错,APP会因为IO异常而崩溃!为什么呢,这是因为retrofit在执行excute()方法时会...
  • URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和... 每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络请求后在 Http
  • 在使用volley和okhttp的时候,访问https的网站,经常会碰到一个异常就是javax.net.ssl.SSLHandshakeException,大致...一般这种情况下会报的异常是这样的:javax.net.ssl.SSLHandshakeException: java.security.c...
  • 上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错的情况下,也应该 ...
  • Android 网络请求及网络状态判断

    千次阅读 2016-08-17 17:53:38
    Android 网络请求及网络状态判断
  • 微信小程序-请求异常处理

    千次阅读 2020-01-09 16:59:33
    自己琢磨的处理方法,如有缺陷,非常欢迎提出,... 网络异常?其他?) --> 直接提示用户 请求连接成功--> 非token问题( code报200,500等 ) --> 正常流程走 --> token问题( code报token异常约定的c...
  • Carson带你学Android:网络请求库Retrofit源码分析

    万次阅读 多人点赞 2017-06-26 08:47:17
    而在Android网络请求库中,Retrofit是当下最热的一个网络请求库今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜欢 在阅读本文前,建议先阅读文章:这是一份很详细的 Retrofit 2.0 使用教程(含实例...
  • 很多时候我们有这样一个需求,需要在网络请求完了之后再去渲染页面,尤其是在一个界面有多个相关网络请求的时候需要处理。 这里不得不提到一个系统的组件FutureBuilder,我们直接来看用法。 @override Widget ...
  • 使用Retrofit + RxJava 网络请求

    千次阅读 2018-06-02 12:09:42
    Android网络请求框架是Android开发中必须使用的,个人用过的网络请求框架有Android-async-http,Volley,Okhttp,以及本篇所介绍的Retrofit,我们不能用绝对的眼光去衡量这几个框架的优缺点,目前市场上使用最少的是...
  • 解决Cordova https请求异常

    千次阅读 2018-04-23 17:01:46
    问题描述:1、debug模式下正常;2、打包release后异常;3、部分手机异常(怀疑是Android 版本过低)解决方式:修改 org.apache.cordova.engine.SystemWebViewClient.java@TargetApi(8) @Override public vo...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 300,794
精华内容 120,317
关键字:

网络请求异常该怎么办