【问题标题】:java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessiblejava.lang.SecurityException:无法使 java.lang.reflect.Method 构造函数可访问
【发布时间】:2018-02-13 10:09:20
【问题描述】:

我使用的是 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) 

【问题讨论】:

标签: java android gson


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的第一个参数视图在 toJson 方法中是错误的。来自文档Class GSON。传递合适的参数它将起作用

    toJson(JsonElement jsonElement)

    将 JsonElements 树转换为其等效的 JSON 表示。

    void toJson(JsonElement jsonElement, Appendable writer)

    为 JsonElements 树写出等效的 JSON。

    void toJson(JsonElement jsonElement, JsonWriter writer)

    将 jsonElement 的 JSON 写入 writer。

    String toJson(Object src)

    该方法将指定的对象序列化成其等效的Json 表示。

    void toJson(Object src, Appendable writer)

    该方法将指定的对象序列化成其等效的Json 表示。

    String toJson(Object src, 类型 typeOfSrc)

    这个方法序列化指定的对象,包括那些 泛型类型,转换为其等效的 Json 表示形式。

    void toJson(Object src, Type ofSrc, Appendable writer)

    这个方法序列化指定的对象,包括那些 泛型类型,转换为其等效的 Json 表示形式。

    void toJson(Object src, Type typeOfSrc, JsonWriter writer)

    将 typeOfSrc 类型的 src 的 JSON 表示形式写入 writer。

    【讨论】:

    • 我用过 String str = gson.toJson(view, View.class);不是来自Json :(
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多