Retrofit2+RxJava封装的网络框架(中)

本篇主要把工具类的代码贴出,下篇讲解用法。

package com.abysskitty.frame.network;

import rx.Subscriber;

/**
 * Created by AbyssKitty on 2016/10/12.
 * Version 1.0
 * 可以在本类中对 Subscriber 获取到的数据进行处理。
 * 例如集中处理错误信息等
 */
public class NetSubscriber<T> extends Subscriber<T> {

    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {
        if("".equals(e.getLocalizedMessage().toString())){
            System.err.println("========================   C Net Error  ========================");
            System.err.println("custom DEBUG :Net Error = " + "数据解析错误,请检查解析type是否正确 (NetModle.******)");
            System.err.println("========================   E Net Error  ========================");
        }else{
//            Toast.makeText(BaseApplication.context,"错误的操作 或 服务器响应异常",Toast.LENGTH_SHORT).show();
            System.err.println("========================   C Net Error  ========================");
            System.err.println("custom DEBUG :Net Error = " + e.getLocalizedMessage());
            System.err.println("========================   E Net Error  ========================");
        }
    }

    @Override
    public void onNext(T t) {

    }
}
package com.abysskitty.frame.network;

import com.abysskitty.frame.network.bean.RespBean;

/**
 * Created by AbyssKitty on 2016/10/18.
 * 使用接口 网络数据回调接口
 */
public interface OnNetSubscriberListener {
//    void onNext(RespBean bean,Object data);
    void onNext(RespBean bean);
    void onError(Throwable e);
//    void onCompleted();
}
package com.abysskitty.frame.network.bean;

import java.util.List;

/**
 * Created by Administrator on 2016/10/19.
 */
public class RespBean {
    public String message;    //返回信息
    public List list;       //list数据
    public Object obj;        //obj数据
    public String code;    //成功返回9999
    public String page;
    public String pageNum;

    public List depart; //部门
    public List user;

    public Object info;
    public String total;         //条数
    public String key;        //0
    public String returnCode; //返回码 正确=SUCCESS
    public RespDate resp;

    public String token;
    public String userId;
}

RespBean是数据回调初始化解析的Bean,需要根据具体的业务来自由定制(根据接口数据结构)。

下面是序列化log的代码

package com.abysskitty.frame.tool;

import android.support.annotation.IntDef;
import android.support.annotation.Nullable;

import com.abysskitty.frame.Switch;
import com.abysskitty.frame.network.loggingInterceptors.klog.BaseLog;
import com.abysskitty.frame.network.loggingInterceptors.klog.FileLog;
import com.abysskitty.frame.network.loggingInterceptors.klog.JsonLog;
import com.abysskitty.frame.network.loggingInterceptors.klog.XmlLog;

import java.io.File;

/**
 * This is a Log tool,with this you can the following
 * <ol>
 * <li>use KLog.d(),you could print whether the method execute,and the default tag is current class's
 * name</li>
 * <li>use KLog.d(msg),you could print log as before,and you could location the method with a click in
 * Android Studio Logcat</li>
 * <li>use KLog.json(),you could print json string with well format automatic</li>
 * </ol>
 *
 * @author zhaokaiqiang
 *         github https://github.com/ZhaoKaiQiang/KLog
 *         15/11/17 扩展功能,添加对文件的支持
 *         15/11/18 扩展功能,增加对XML的支持,修复BUG
 *         15/12/8  扩展功能,添加对任意参数的支持
 *         15/12/11 扩展功能,增加对无限长字符串支持
 *         16/6/13  扩展功能,添加对自定义全局Tag的支持
 */
public class LogUtil {

    /**
     * 是否显示Log,调试时打开,正式发布时关闭!!!
     * */
    private static boolean IS_SHOW_LOG = Switch.isDebug;

    public static final String LINE_SEPARATOR = System.getProperty("line.separator");
    public static final String NULL_TIPS = "Log with null object";

    private static final String DEFAULT_MESSAGE = "test here";
    private static final String PARAM = "Param";
    private static final String NULL = "null";
    private static final String TAG_DEFAULT = "mLogUtil";
    private static final String SUFFIX = ".java";

    public static final int JSON_INDENT = 4;

    public static final int V = 0x1;
    public static final int D = 0x2;
    public static final int I = 0x3;
    public static final int W = 0x4;
    public static final int E = 0x5;
    public static final int WTF = 0x6;
    public static final int JSON = 0x7;
    public static final int XML = 0x8;

    @IntDef({ V, D, I, W, E, WTF, JSON, XML })
    public @interface LogType {}

    private static final int STACK_TRACE_INDEX = 6;

    public static String mGlobalTag = TAG_DEFAULT;

    public static void init(boolean isShowLog) {
        IS_SHOW_LOG = isShowLog;
    }

    public static void init(boolean isShowLog, @Nullable String tag) {
        IS_SHOW_LOG = isShowLog;
        mGlobalTag = tag;
    }

    public static void v() {
        printLog(V, null, DEFAULT_MESSAGE);
    }

    public static void v(Object msg) {
        printLog(V, null, msg);
    }

    public static void v(String tag, Object... objects) {
        printLog(V, tag, objects);
    }

    public static void d() {
        printLog(D, null, DEFAULT_MESSAGE);
    }

    public static void d(Object msg) {
        printLog(D, null, msg);
    }

    public static void d(String tag, Object... objects) {
        printLog(D, tag, objects);
    }

    public static void i() {
        printLog(I, null, DEFAULT_MESSAGE);
    }

    public static void i(Object msg) {
        printLog(I, null, msg);
    }

    public static void i(String tag, Object... objects) {
        printLog(I, tag, objects);
    }

    public static void w() {
        printLog(W, null, DEFAULT_MESSAGE);
    }

    public static void w(Object msg) {
        printLog(W, null, msg);
    }

    public static void w(String tag, Object... objects) {
        printLog(W, tag, objects);
    }

    public static void e() {
        printLog(E, null, DEFAULT_MESSAGE);
    }

    public static void e(Object msg) {
        printLog(E, null, msg);
    }

    public static void e(String tag, Object... objects) {
        printLog(E, tag, objects);
    }

    public static void a() {
        printLog(WTF, null, DEFAULT_MESSAGE);
    }

    public static void a(Object msg) {
        printLog(WTF, null, msg);
    }

    public static void a(String tag, Object... objects) {
        printLog(WTF, tag, objects);
    }

    public static void json(String jsonFormat) {
        printLog(JSON, null, jsonFormat);
    }

    public static void json(String tag, String jsonFormat) {
        printLog(JSON, tag, jsonFormat);
    }

    public static void xml(String xml) {
        printLog(XML, null, xml);
    }

    public static void xml(String tag, String xml) {
        printLog(XML, tag, xml);
    }

    public static void file(File targetDirectory, Object msg) {
        printFile(null, targetDirectory, null, msg);
    }

    public static void file(String tag, File targetDirectory, Object msg) {
        printFile(tag, targetDirectory, null, msg);
    }

    public static void file(String tag, File targetDirectory, String fileName, Object msg) {
        printFile(tag, targetDirectory, fileName, msg);
    }

    public static void printLog(@LogType int type, String tagStr, Object... objects) {
        printLog(true, type, tagStr, objects);
    }

    public static void printLog(boolean showHeadString, @LogType int type, String tagStr,
            Object... objects) {
        if (!IS_SHOW_LOG) {
            return;
        }

        String[] contents = wrapperContent(tagStr, objects);
        String tag = contents[0];
        String msg = contents[1];
        String headString = contents[2];

        if (!showHeadString) {
            headString = "";
        }

        switch (type) {
            case V:
            case D:
            case I:
            case W:
            case E:
            case WTF:
                BaseLog.printDefault(type, tag, headString + msg);
                break;
            case JSON:
                JsonLog.printJson(tag, msg, headString);
                break;
            case XML:
                XmlLog.printXml(tag, msg, headString);
                break;
        }
    }


    private static void printFile(String tagStr, File targetDirectory, String fileName, Object objectMsg) {

        if (!IS_SHOW_LOG) {
            return;
        }

        String[] contents = wrapperContent(tagStr, objectMsg);
        String tag = contents[0];
        String msg = contents[1];
        String headString = contents[2];

        FileLog.printFile(tag, targetDirectory, fileName, headString, msg);
    }

    /**
     * @param tagStr TAG标签
     * @param objects 要打印的值
     */
    private static String[] wrapperContent(String tagStr, Object... objects) {

        StackTraceElement[] stackTrace = Thread.currentThread()
                .getStackTrace();

        StackTraceElement targetElement = stackTrace[STACK_TRACE_INDEX];
        String className = targetElement.getClassName();
        String[] classNameInfo = className.split("\\.");
        if (classNameInfo.length > 0) {
            className = classNameInfo[classNameInfo.length - 1] + SUFFIX;
        }

        if (className.contains("$")) {
            className = className.split("\\$")[0] + SUFFIX;
        }

        String methodName = targetElement.getMethodName();
        int lineNumber = targetElement.getLineNumber();

        if (lineNumber < 0) {
            lineNumber = 0;
        }

        String methodNameShort = methodName.substring(0, 1)
                .toUpperCase() + methodName.substring(1);

        String tag = (tagStr == null ? mGlobalTag : tagStr);
        String msg = (objects == null) ? NULL_TIPS : getObjectsString(objects);
        String headString = "[ (" + className + ":" + lineNumber + ")#" + methodNameShort + " ] ";

        return new String[] { tag, msg, headString };
    }

    private static String getObjectsString(Object... objects) {

        if (objects.length > 1) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("\n");
            for (int i = 0; i < objects.length; i++) {
                Object object = objects[i];
                if (object == null) {
                    stringBuilder.append(PARAM)
                            .append("[")
                            .append(i)
                            .append("]")
                            .append(" = ")
                            .append(NULL)
                            .append("\n");
                } else {
                    stringBuilder.append(PARAM)
                            .append("[")
                            .append(i)
                            .append("]")
                            .append(" = ")
                            .append(object.toString())
                            .append("\n");
                }
            }
            return stringBuilder.toString();
        } else {
            Object object = objects[0];
            return object == null ? NULL : object.toString();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值