android - 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)```
解决方案
而不是提供类只是提供保存数据的类的变量:
db.collection("u").document(test1.getName()).collection("profile").document("profile").set(test1);
推荐阅读
- ruby-on-rails - 为什么我看到的是 User::ActiveRecord_Relation 而不是 ActiveRecord::Relation?
- javascript - 为什么我的 Chrome 扩展事件不起作用?
- azure - 注销后之前捕获的请求在 azure 广告身份验证中仍然有效
- php - 在codeigniter多词搜索中面临问题
- string - 如何在 Haskell 中从字符串中解析整数
- npm - 无法启动 Electron 应用程序 - 缺少 package.json
- testing - 出于测试目的在 CPU 中禁用 AVX2
- javascript - 如何知道一个对象是可见的还是隐藏的?
- excel - 连接两列的信息
- php - 使用 PDO 连接到远程 Ms-SQL 服务器