java.lang.AssertionError: illegal type variable reference 解决

我遇到的问题是,混淆之后或者使用第三方加固之后出现的这个错误  illegal type variable reference 7.0-7.1.1全部崩溃,

我使用的是SharedPreferences 保存的 List<String> 列表

public static <T> List<T> getDataList(Context context,String tag) {
       List<T> datalist=new ArrayList<T>();
        String strJson = sp.getString(tag, null);
        if (null == strJson) {
            return datalist;
        }
        Gson gson = new Gson();
        datalist = gson.fromJson(strJson, new TypeToken<List<T>>() {
        }.getType());
        return datalist;
    }

根据报错日志查到是 fromjson时候出现的错误,出了 Android 7.0的并没有出现这个错误,混淆文件里面也加上了

-keepattributes EnclosingMethod还有关于gson所有的都 keep了,还有这个错误,
查阅了好长时间资料,这句(T)new TypeToken<List<T>>,找不到类型 我就改成了new TypeToken<List<String>>
public static <T> List<T> getDataList(Context context,String tag) {
        List<T> datalist = new ArrayList<T>();
        if (sp == null)
            sp = context.getSharedPreferences(SP_NAME, 0);
        String strJson =  sp.getString(tag, null);
        if (null == strJson) {
            return datalist;
        }
        Gson gson = new Gson();
        datalist = gson.fromJson(strJson, new TypeToken<List<String>>() {
        }.getType());
        return datalist;
    }
我看其他人好多种写法 混淆或者第三方加固之后都会报这个错,只要把范型改成List<String>;就可以了
最好是在混淆文件中把 javabean都 keep了 避免不必要的麻烦
-keepattributes EnclosingMethod


-keep public class com.包名.bean.**{*;}

-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
仔细检查代码还是可以找到原因的,哈哈
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值