FireStore 数据未显示访问隐藏方法 Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V(灰名单,链接,允许)

Posted

技术标签:

【中文标题】FireStore 数据未显示访问隐藏方法 Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V(灰名单,链接,允许)【英文标题】:FireStore Data Not Showing Accessing hidden method Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V (greylist, linking, allowed) 【发布时间】:2021-08-11 21:22:03 【问题描述】:

当我尝试使用 FirestoreRecyclerAdapter 从 Firestore 检索数据时,它没有显示。

错误日志

Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)

Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)

Java 代码

    //FirebaseFireStore Variable
    firebaseFirestore = FirebaseFirestore.getInstance();
    //RecyclerView Variable
    recyclerView = findViewById(R.id.recyclerViewId);
    //Query
    Query query = firebaseFirestore.collection("root");
    //RecyclerOption
    FirestoreRecyclerOptions<TestModel> options = new FirestoreRecyclerOptions.Builder<TestModel>()
            .setQuery(query, TestModel.class)
            .build();
    //FirestoreRecyclerAdapter
    adapter = new FirestoreRecyclerAdapter<TestModel, MyTestViewHolder>(options) 
        @NonNull
        @Override
        public MyTestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.test_item, parent, false);
            return new MyTestViewHolder(view);
        
        @Override
        protected void onBindViewHolder(@NonNull TestActivity.MyTestViewHolder holder, int position, @NonNull TestModel model) 
            holder.tit.setText(model.getmTitle());
            holder.sto.setText(model.getmStory());
        
    ;
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

private class MyTestViewHolder extends RecyclerView.ViewHolder 
    TextView tit, sto;
    public MyTestViewHolder(@NonNull View itemView) 
        super(itemView);
        tit = itemView.findViewById(R.id.testTitleId);
        sto = itemView.findViewById(R.id.testStoryId);
    

@Override
protected void onStart() 
    super.onStart();
    adapter.startListening();

@Override
protected void onStop() 
    super.onStop();
    adapter.stopListening();

模型类

 String mTitle, mStory;

public TestModel(String mTitle, String mStory) 
    this.mTitle = mTitle;
    this.mStory = mStory;


private TestModel()

public String getmTitle() 
    return mTitle;


public void setmTitle(String mTitle) 
    this.mTitle = mTitle;


public String getmStory() 
    return mStory;


public void setmStory(String mStory) 
    this.mStory = mStory;

FireStore 控制台

【问题讨论】:

【参考方案1】:

当您尝试将 Firestore 中的文档映射到“TestModel”类型的对象时,类中存在的字段名称必须与数据库中存在的属性名称相匹配。不幸的是,在您的情况下,这些字段不匹配。看,你的数据库中的字段被称为“故事”和“标题”,而在类中被称为“mStory”和“mTitle”,这是正确的。

要解决这个问题,您有两个选择,您可以更改数据库中属性的名称以匹配类中的名称,或者您可以在 getter 前面使用注释。例如,对于“mTitle”字段,您的 getter 应如下所示:

@PropertyName("title")
public String getTitle() 
    return mTitle;

这样,您告诉编译器查找名为“title”而不是“mTitle”的属性。

【讨论】:

谢谢亚历克斯。是的,当我将模型类变量名称更改为 Firestore 键名时,它就可以工作了。

以上是关于FireStore 数据未显示访问隐藏方法 Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V(灰名单,链接,允许)的主要内容,如果未能解决你的问题,请参考以下文章

如果为空,如何隐藏 Firestore RecyclerView

在 Firestore 中使用 addSnapshotListener 时数据未正确显示

视图模型中的 Firestore 方法未在 SwiftUI onAppear 方法中调用

颤动的firestore地理点未显示为标记

Firebase firestore 云函数显示错误:无效使用类型“未定义”作为 Firestore 参数

firestore 中的值显示为未定义