java.lang.SecurityException: Can't make field constructor accessible
阿新 • • 發佈:2017-07-06
比較 spa client prev title with o-c and 切換
原本使用GsonConvertor,在Android版本5.1.1上沒有任何問題,結果切換到版本6.0.1上,出現以下所示問題:
- java.lang.IllegalArgumentException: Unable to create converter for java.util.List<model>
,StackOverFlow有個帖子談這個問題http://stackoverflow.com/questions/34315499/unable-to-create-converter-for-Java-util-list-retrofit-2-0-0-beta2 。但是我本身的代碼就如答案,所以那個答案沒用,看了看Retrofit文檔,把Convertor的庫由Gson改為Jackson,解決了這個問題,但是JackSon有缺憾,它對JSON對象的接口字段定義要求比較嚴格,如果Json裏面有對象沒定義的字段就會Error,這非常限制接口的版本升級,沒有辦法倒回來繼續解決Gson的問題。Gson的問題往下看,根本錯誤原因是:
- java.lang.SecurityException: Can‘t make field constructor accessible
原來這是一個Android M Preview版的問題,Gson官方也已經承認,加上我還用了ActiveAndroid,解決辦法:
- GsonBuilder builder = new GsonBuilder();
- builder.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC);
- Gson gson = builder.create();
- retrofit = new Retrofit.Builder()
- .baseUrl(baseURL)
- .addConverterFactory(GsonConverterFactory.create(gson))
- .client(client)
- .build();
java.lang.SecurityException: Can't make field constructor accessible