package licola.demo.com.huabandemo.HttpUtils.Converter;
import android.text.TextUtils;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import licola.demo.com.huabandemo.Util.Logger;
import licola.demo.com.huabandemo.Util.Utils;
import okhttp3.ResponseBody;
/**
* Created by LiCola on 2016/04/17 18:23
*/
public class AvatarResponseBodyConverter<T> implements retrofit2.Converter<ResponseBody, T> {
private final Gson gson;
private final Type type;
private String mSKey = "\"key\":\"([^\"]*)\"";
private Pattern mPkey = Pattern.compile(mSKey);
public AvatarResponseBodyConverter(Gson gson, Type type) {
this.gson = gson;
this.type = type;
// Logger.d();
}
@Override
public T convert(ResponseBody value) throws IOException {
Reader reader = value.charStream();//取出字节流
String result;
try {
BufferedReader in = new BufferedReader(reader);//读取
StringBuffer buffer = new StringBuffer();//构造buffer对象用于拼接
String line;
while ((line = in.readLine()) != null) {//读行
if (Thread.interrupted()) {
break;
}
buffer.append(line);//写入buffer
}
result = buffer.toString();
} catch (InterruptedIOException e) {
Logger.d(e.toString());
result = "{}";
} finally {
Utils.closeQuietly(reader);//记得关闭流
}
// Logger.d();
return gson.fromJson(regexChange(result), type);//返回解析后的对象
}
/**
* 对输入的字符串进行处理
*
* @param input 传入的需要处理的字符串
* @return
*/
private String regexChange(String input) {
String result = input;
//匹配规则是当avatar是{}包装的对象
if (!TextUtils.isEmpty(result)&&(!"{}".equals(result))) {
Pattern mPAvatar = Pattern.compile("\"avatar\":\\{([^\\}]*)\\}");
Matcher mMAvatar = mPAvatar.matcher(result);
while (mMAvatar.find()) {//如果找到 开始替换
result = result.replaceFirst("\"avatar\":\\{([^\\}]*)\\}", getKey(mMAvatar.group()));
}
// Logger.d();
}
return result;
}
/**
* 取出关键值返回
* 取出key值 统一拼接成 avatar:"key" 作为String返回
*
* @param group
* @return
*/
private String getKey(String group) {
Matcher matcher = mPkey.matcher(group);
StringBuffer buffer = new StringBuffer();
// Logger.d(TAG);
// buffer.append("\"avatar\":\"http://img.hb.aicdn.com/");
buffer.append("\"avatar\":\"");//替换成不带http头的avatar
while (matcher.find()) {
buffer.append(matcher.group(1));
}
buffer.append("\"");//添加 " 做最后一个字符 完成拼接
return buffer.toString();
}
}