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

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

我使用的是SharedPreferences 保存的 List 列表

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

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

-keepattributes EnclosingMethod还有关于gson所有的都 keep了,还有这个错误,
查阅了好长时间资料,这句(T)new TypeToken>,找不到类型 我就改成了new TypeToken>
public static  List getDataList(Context context,String tag) {
        List datalist = new ArrayList();
        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>() {
        }.getType());
        return datalist;
    }
我看其他人好多种写法 混淆或者第三方加固之后都会报这个错,只要把范型改成List;就可以了
最好是在混淆文件中把 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
仔细检查代码还是可以找到原因的,哈哈

你可能感兴趣的:(java.lang.AssertionError: illegal type variable reference 解决)