问题描述: 使用Log打印服务器返回的json数据时,有时候数据过长,在AndroidStudio的logcat只显示了一部分。没有完整的json体,首先最尴尬的是没法使用AndroidStudio的插件一键生成对应的数据实体了,哈哈。为了使用插件“偷懒”,我目标把数据源全部打印在logcat上。
解决思路: 首先,要知道LogCat中的每次打印的message是有上限的,原来logcat在实现上对于message的内存分配大概是4k左右.所以超过的内容都直接被丢弃了。这就是我们使用Log打印长json字符串,结果不完整的原因。我写一个工具类,用递归的思想处理这个问题,主要代码如下:
LogUtil.java
public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化
private static final String TAG = "way";
public static void e(String msg)
{
if (isDebug)
Log.e(TAG, msg);
}
/**
* 分段打印出较长log文本
* @param logContent 打印文本
* @param showLength 规定每段显示的长度(AndroidStudio控制台打印log的最大信息量大小为4k)
* @param tag 打印log的标记
*/
public static void showLargeLog(String logContent, int showLength, String tag){
if(logContent.length() > showLength){
String show = logContent.substring(0, showLength);
e(tag, show);
/*剩余的字符串如果大于规定显示的长度,截取剩余字符串进行递归,否则打印结果*/
if((logContent.length() - showLength) > showLength){
String partLog = logContent.substring(showLength,logContent.length());
showLargeLog(partLog, showLength, tag);
}else{
String printLog = logContent.substring(showLength, logContent.length());
e(tag, printLog);
}
}else{
e(tag, logContent);
}
}
我们已经知道logcat打印最大信息为4k,写的方法中第二个参数showLength是输入每次打印的长度,经过测试,我发现设置showLargeLog(content, 4000, tag),这样打印出来的每一段结果是还是不完整的,所以说设置长度4000超过了logcat的打印信息量上限。然后我设置showLargeLog(content, 3900, tag)以后,打印的每段信息都很完整了。具体logcat最多能打印多长的字符串,我没有去具体测试。我们使用的时候,设置showLength为小于等于3900即可,当然不要小于0啊,哈哈。