首页 > 解决方案 > java.lang.SecurityException:无法使 java.lang.Class 构造函数可访问

问题描述

我想要一个自定义 JAVA 类对象来存储应用程序中的所有数据。该对象需要传递到 Firebase 云 Firestore 数据库。

为了测试运行,我在按钮上添加了一个简单的 setOnCLickListener() 函数。UI 仅包含此按钮。

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                test test1 = new test("saheel", 23032001, 19, "GOLD", "abc");
/*test1.setAge(19);
test1.setName("saheel2");
test1.setDOB(23032001);
test1.setMembership("GOLD");
test1.setTrainer_name("abc");*/

                db.collection("u").document(test1.getName()).collection("profile").document("profile").set(test.class);
            }
        });

测试班——

public class test {
    private String name;
    private int DOB;
    private int age;
    private String membership;
    private String trainer_name;

    public test(String name, int DOB, int age, String membership, String trainer_name) {
        this.name = name;
        this.DOB = DOB;
        this.age = age;
        this.membership = membership;
        this.trainer_name = trainer_name;
    }

    public test(){
        //no-argument constructor
    }
   public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDOB() {
        return DOB;
    }

    public void setDOB(int DOB) {
        this.DOB = DOB;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getMembership() {
        return membership;
    }

    public void setMembership(String membership) {
        this.membership = membership;
    }

    public String getTrainer_name() {
        return trainer_name;
    }

    public void setTrainer_name(String trainer_name) {
        this.trainer_name = trainer_name;
    }
}

单击按钮时,应用程序崩溃并且 logcat 显示以下错误 -

    Process: com.example.firebase, PID: 2143
    java.lang.SecurityException: Can not make a java.lang.Class constructor accessible
        at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:150)
        at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:132)
        at com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.<init>(CustomClassMapper.java:612)
        at com.google.firebase.firestore.util.CustomClassMapper.loadOrCreateBeanMapperForClass(CustomClassMapper.java:377)
        at com.google.firebase.firestore.util.CustomClassMapper.serialize(CustomClassMapper.java:177)
        at com.google.firebase.firestore.util.CustomClassMapper.serialize(CustomClassMapper.java:104)
        at com.google.firebase.firestore.util.CustomClassMapper.convertToPlainJavaTypes(CustomClassMapper.java:78)
        at com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData(UserDataReader.java:231)
        at com.google.firebase.firestore.UserDataReader.parseSetData(UserDataReader.java:75)
        at com.google.firebase.firestore.DocumentReference.set(DocumentReference.java:166)
        at com.google.firebase.firestore.DocumentReference.set(DocumentReference.java:146)
        at com.example.firebase.addData$1.onClick(addData.java:32)
        at android.view.View.performClick(View.java:7448)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)```


标签: androidfirebasefirebase-realtime-databasegoogle-cloud-firestore

解决方案


而不是提供类只是提供保存数据的类的变量:

db.collection("u").document(test1.getName()).collection("profile").document("profile").set(test1);

推荐阅读