本篇主要把工具类的代码贴出,下篇讲解用法。
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();
}
}
}