美文网首页
Android -- 异常

Android -- 异常

作者: 喜欢书的女孩 | 来源:发表于2017-08-30 21:29 被阅读52次

[1] Java中定义的异常

1.异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

2.发生原因:
用户输入了非法数据。
要打开的文件不存在。
网络通信时连接中断,或者JVM内存溢出。

3.异常分类
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

[2] Exception 类的关系

2017-8-30

[3] 异常方法

public String getMessage()       //返回关于发生的异常的详细信息
public void printStackTrace()    //打印toString()结果和栈层次到System.err,即错误输出流。

[4] 捕获异常

try{
  // 程序代码
}catch(Exception e){
  // 程序代码
}finally{
  // 程序代码
}

[5] Android 项目中异常处理

package com.example.administrator.mydemoapp.client;


import com.google.gson.JsonParseException;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;

import org.json.JSONException;

import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.text.ParseException;

import javax.net.ssl.SSLHandshakeException;

/**
 * Created by Administrator on 2017/8/30
 */

public class ExceptionHandle {

    private static final int UNAUTHORIZED = 401;
    private static final int FORBIDDEN = 403;
    private static final int NOT_FOUND = 404;
    private static final int REQUEST_TIMEOUT = 408;
    private static final int INTERNAL_SERVER_ERROR = 500;
    private static final int BAD_GATEWAY = 502;
    private static final int SERVICE_UNAVAILABLE = 503;
    private static final int GATEWAY_TIMEOUT =504;

    public static ResponseThrowable handleException(Throwable e){
        ResponseThrowable ex;
        if (e instanceof HttpException){
            HttpException httpException =(HttpException) e;
            ex = new ResponseThrowable(e , ERROR.HTTP_ERROR);
            switch (httpException.code()){
                case UNAUTHORIZED:
                case FORBIDDEN:
                case NOT_FOUND:
                case REQUEST_TIMEOUT:
                case GATEWAY_TIMEOUT:
                case INTERNAL_SERVER_ERROR:
                case BAD_GATEWAY:
                case SERVICE_UNAVAILABLE:
                default:
                    ex.message = "网络错误";
                    break;
            }
            return ex;
        }else if (e instanceof ServerException){
            ServerException resultException = (ServerException) e;
            ex = new ResponseThrowable(resultException, resultException.code);
            ex.message = resultException.message;
            return ex;
        }else if (e instanceof JsonParseException
                || e instanceof JSONException
                || e instanceof ParseException){
            ex = new ResponseThrowable(e, ERROR.PARSE_ERROR);
            ex.message = "解析错误";
            return ex;
        }else if (e instanceof ConnectException){
            ex = new ResponseThrowable(e, ERROR.NETWORD_ERROR);
            ex.message = "连接失败";
            return ex;
        }else if (e instanceof SSLHandshakeException){
            ex = new ResponseThrowable(e, ERROR.TIMEOUT_ERROR);
            ex.message = "连接超时";
            return ex;
        }else if (e instanceof SocketTimeoutException){
            ex = new ResponseThrowable(e, ERROR.TIMEOUT_ERROR);
            ex.message = "连接超时";
            return ex;
        }else {
            ex = new ResponseThrowable(e, ERROR.UNKNOWN);
            ex.message = "未知错误";
            return ex;
        }
    }

    /**
     * 约定异常
     */
    class ERROR{

        /**
         * 未知错误
         */
        public static final int UNKNOWN = 1000;
        /**
         * 解析错误
         */
        public static final int PARSE_ERROR = 1001;
        /**
         * 网络错误
         */
        public static final int NETWORD_ERROR = 1002;
        /**
         * 协议错误
         */
        public static final int HTTP_ERROR = 1003;
        /**
         * 证书错误
         */
        public static final int SSL_ERROR = 1005;
        /**
         * 连接超时
         */
        public static final int TIMEOUT_ERROR = 1006;

    }


    public static class ResponseThrowable extends Exception{
        public int code;
        public String message;

        public ResponseThrowable(Throwable throwable,int code){
            super(throwable);
            this.code = code;
        }
    }

    public class ServerException extends RuntimeException{
        public int code;
        public String message;
    }

}

调用

ExceptionHandle.handleException(throwable)

[6] 总结

最近接触了很多实战中的项目,才发现,项目不是代码的累加,而是代码的优化整合。
代码参考大神,感谢分享。

相关文章

网友评论

      本文标题:Android -- 异常

      本文链接:https://www.haomeiwen.com/subject/grcgdxtx.html