解决AndroidStudio的logcat显示超长字符串的问题

问题描述: 使用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啊,哈哈。

LogUtil.java下载地址

你可能感兴趣的:(2016-学习总结)