gson java.lang.SecurityException:无法使java.lang.reflect.方法构造函数可访问

ni65a41a  于 2022-11-06  发布在  Java
关注(0)|答案(2)|浏览(275)

我使用的是Gson 2.8.2版
我使用了以下代码

public void saveObject(View view){
        SharedPreferences prefs = this.getSharedPreferences(
                "com.example.app", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        Gson gson = new Gson();
        String str = gson.toJson(view, View.class);
        editor.putString("text", str);
        editor.commit();
}

但我收到如下错误

Process: com.example.amitsiddhpura.paperview, PID: 17252
                                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.amitsiddhpura.paperview/com.example.amitsiddhpura.paperview.MainActivity}:**java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible**
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                                                                                         at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                         at android.os.Looper.loop(Looper.java:164)
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                                         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                                                                                      Caused by: java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible
                                                                                         at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:131)
                                                                                         at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:115)
                                                                                         at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101)
                                                                                         at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:99)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
                                                                                         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                                                                                         at com.google.gson.Gson.getAdapter(Gson.java:423)
                                                                                         at com.google.gson.Gson.toJson(Gson.java:661)
                                                                                         at com.google.gson.Gson.toJson(Gson.java:648)
                                                                                         at com.google.gson.Gson.toJson(Gson.java:603)
                                                                                         at com.example.amitsiddhpura.paperview.MainActivity.saveObject(MainActivity.java:34)
                                                                                         at com.example.amitsiddhpura.paperview.MainActivity.onCreate(MainActivity.java:23)
                                                                                         at android.app.Activity.performCreate(Activity.java:6999)
                                                                                         at android.app.Activity.performCreate(Activity.java:6990)
                                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                                                                                         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                         at android.os.Looper.loop(Looper.java:164) 
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:6494) 
                                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                                         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
5sxhfpxr

5sxhfpxr1#

您正在尝试保存包含无法序列化上下文视图类Read Here.

kr98yfug

kr98yfug2#

toJson方法中视图第一个参数错误从文档Class GSON中传递合适参数,它将工作
到Json(Json元素json元素)
将JsonElement树转换为其等效的JSON表示形式。
void toJson(JsonElement jsonElement,可追加的编写器)
写出JsonElement树的等效JSON。
void to Json(JsonElement,JsonWriter编写器)
将jsonElement的JSON写入编写器。
字符串toJson(对象源)
此方法将指定的对象序列化为其等效的Json表示形式。
void toJson(对象源,可追加的编写器)
此方法将指定的对象序列化为其等效的Json表示形式。
字符串toJson(对象源,类型typeOfSrc)
此方法将指定的对象(包括泛型类型的对象)序列化为其等效的Json表示形式。
void toJson(对象源,类型typeOfSrc,可追加的编写器)
此方法将指定的对象(包括泛型类型的对象)序列化为其等效的Json表示形式。
void to Json(对象源代码,类型源代码类型,JsonWriter编写器)
将typeOfSrc类型的src的JSON表示形式写入writer。

相关问题