1. 程式人生 > >java.lang.SecurityException: Can't make field constructor accessible

java.lang.SecurityException: Can't make field constructor accessible

比較 spa client prev title with o-c and 切換

原本使用GsonConvertor,在Android版本5.1.1上沒有任何問題,結果切換到版本6.0.1上,出現以下所示問題:

  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的問題往下看,根本錯誤原因是:

  1. java.lang.SecurityException: Can‘t make field constructor accessible


原來這是一個Android M Preview版的問題,Gson官方也已經承認,加上我還用了ActiveAndroid,解決辦法:

    1. GsonBuilder builder = new GsonBuilder();
    2. builder.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC);
    3. Gson gson = builder.create();
    4. retrofit = new Retrofit.Builder()
    5. .baseUrl(baseURL)
    6. .addConverterFactory(GsonConverterFactory.create(gson))
    7. .client(client)
    8. .build();

java.lang.SecurityException: Can't make field constructor accessible