Java Firestore在填充时使文本字段为空

Java Firestore在填充时使文本字段为空,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我制作了一个测试应用程序,试图了解Firestore数据库和RecyclerAdapter的功能。我遵循了一些关于这个主题的教程,但最接近的是这个,当应用程序加载时,它可以看到数据库对象,因为它加载了正确的数字,当我这样做时,存储了3个。但是当我设置句柄文本时,它会给我一个空字符串 public class MainActivity extends AppCompatActivity { FirebaseFirestore mDatabase; private FirestoreRecycle

我制作了一个测试应用程序,试图了解Firestore数据库和
RecyclerAdapter
的功能。我遵循了一些关于这个主题的教程,但最接近的是这个,当应用程序加载时,它可以看到数据库对象,因为它加载了正确的数字,当我这样做时,存储了3个。但是当我设置句柄文本时,它会给我一个空字符串

public class MainActivity extends AppCompatActivity {

FirebaseFirestore mDatabase;
private FirestoreRecyclerAdapter mFirestoreRecyclerAdapter;
RecyclerView mRecyclerView;
LinearLayoutManager mLayoutManager;
Toolbar mToolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    initRecyclerAdapter();
    setSupportActionBar(mToolbar);
    FloatingActionButton fab = findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

@Override
public void onStart() {
    super.onStart();
    mFirestoreRecyclerAdapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    mFirestoreRecyclerAdapter.stopListening();
}
public void init() {
    mToolbar = findViewById(R.id.toolbar);
    mRecyclerView = findViewById(R.id.recycler_view);
    mLayoutManager = new LinearLayoutManager(getApplicationContext(), 
LinearLayoutManager.VERTICAL, false);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mDatabase = FirebaseFirestore.getInstance();
}

private void initRecyclerAdapter() {
    Query query = mDatabase.collection("users");

    FirestoreRecyclerOptions<User> response = new 
FirestoreRecyclerOptions.Builder<User>()
            .setQuery(query, User.class)
            .build();

    mFirestoreRecyclerAdapter = new FirestoreRecyclerAdapter<User, 
MainActivity.UserHolder>(response) {
        @Override
        public MainActivity.UserHolder onCreateViewHolder(ViewGroup 
parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item, parent, false);

            return new UserHolder(view);            }

        @Override
        protected void onBindViewHolder(MainActivity.UserHolder holder, 
int position, User model) {
            holder.setFirstName(model.getFirstName());
            holder.setLastName(model.getLastName());
            holder.setBornDate(model.getBornDate());
        }
    };
    mFirestoreRecyclerAdapter.notifyDataSetChanged();
    mRecyclerView.setAdapter(mFirestoreRecyclerAdapter);

}
public class UserHolder extends RecyclerView.ViewHolder {
    TextView textName;
    CircleImageView imageView;
    TextView textTitle;
    TextView textCompany;
    public View itemView;

    public UserHolder(View itemView) {
        super(itemView);
        textName = itemView.findViewById(R.id.name);
        textTitle = itemView.findViewById(R.id.title);
        textCompany = itemView.findViewById(R.id.company);
        this.itemView = itemView;
    }
    public void setFirstName(String name) {
        textName.setText(name);
    }
    public void setLastName(String lastName) {
        textTitle.setText(lastName);
    }
    public void setBornDate(String bornDate) {
        textCompany.setText(bornDate);
    }
}
}

public class User {

private String born;
private String first;
private String last;

public User() { }

public User(String born, String first, String last) {
    this.born = born;
    this.first = first;
    this.last = last;
}

public String getFirstName() {
    return first;
}

public void setFirstName(String first) {
    this.first = first;
}

public String getLastName() {
    return last;
}

public void setLastName(String last) {
    this.last = last;
}

public String getBornDate() {
    return born;
}

public void setBornDate(String born) {
    this.born = born;
}
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.android.support:design:27.0.2'
    implementation 'com.android.support:cardview-v7:27.0.2'
    implementation 'com.android.support:recyclerview-v7:27.0.2'

    implementation 'de.hdodenhof:circleimageview:2.0.0'

    implementation 'com.google.firebase:firebase-core:11.4.2'
    implementation 'com.google.firebase:firebase-firestore:11.4.2'
    implementation 'com.firebaseui:firebase-ui-firestore:3.0.0'

    implementation 'com.android.support.constraint:constraint- 
    layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 
    'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
public类MainActivity扩展了AppCompatActivity{
FirebaseFirestore数据库;
私人FirestoreRecyclerAdapter mFirestoreRecyclerAdapter;
回收视图mRecyclerView;
直线布局经理mLayoutManager;
工具栏工具栏;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initRecyclerAdapter();
设置支持操作栏(mToolbar);
FloatingActionButton fab=findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
}
@凌驾
public void onStart(){
super.onStart();
mFirestoreRecyclerAdapter.startListening();
}
@凌驾
公共void onStop(){
super.onStop();
mFirestoreRecyclerAdapter.stopListening();
}
公共void init(){
mToolbar=findviewbyd(R.id.toolbar);
mRecyclerView=findviewbyd(R.id.recycler\u视图);
mLayoutManager=新建LinearLayoutManager(getApplicationContext(),
LinearLayoutManager.VERTICAL,false);
mRecyclerView.setLayoutManager(mllayoutmanager);
mDatabase=FirebaseFirestore.getInstance();
}
私有void initRecyclerAdapter(){
Query Query=mDatabase.collection(“用户”);
FirestoreRecyclerOptions响应=新建
FirestoreRecyclerOptions.Builder()
.setQuery(查询,用户.class)
.build();
mFirestoreRecyclerAdapter=新FirestoreRecyclerAdapter(响应){
@凌驾
public MainActivity.UserHolder onCreateViewHolder(视图组
父对象,int视图类型){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.list_项,父项,假);
返回新的用户持有者(视图);}
@凌驾
BindViewHolder(MainActivity.UserHolder,
int位置,用户模型){
setFirstName(model.getFirstName());
holder.setLastName(model.getLastName());
holder.setBornDate(model.getBornDate());
}
};
mFirestoreRecyclerAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(mFirestoreRecyclerAdapter);
}
公共类UserHolder扩展了RecyclerView.ViewHolder{
文本视图文本名称;
CircleImageView图像视图;
文本视图文本标题;
TextView textCompany;
公共视图项目视图;
公共用户持有者(查看项目视图){
超级(项目视图);
textName=itemView.findviewbyd(R.id.name);
textTitle=itemView.findViewById(R.id.title);
textCompany=itemView.findviewbyd(R.id.company);
this.itemView=itemView;
}
public void setFirstName(字符串名称){
textName.setText(名称);
}
public void setLastName(字符串lastName){
textTitle.setText(lastName);
}
公共void setBornDate(字符串bornDate){
textCompany.setText(bornDate);
}
}
}
公共类用户{
私生子女;
私有字符串优先;
私有字符串最后;
公共用户(){}
公共用户(字符串出生、字符串第一、字符串最后){
这是出生的;
this.first=first;
this.last=last;
}
公共字符串getFirstName(){
先返回;
}
public void setFirstName(字符串优先){
this.first=first;
}
公共字符串getLastName(){
最后返回;
}
public void setLastName(最后一个字符串){
this.last=last;
}
公共字符串getBornDate(){
返回出生地;
}
公共无效setBornDate(字符串出生){
这是出生的;
}
}

代码中的问题是所有字段的getter都不正确。因此像
born
这样的字段应该有
getBorn()
方法作为getter,而不是
getBornDate()
。对于
first
last
,正确的getter是
getFirst()
getLast()
,而不是
getFirstName()
getLastName()。请参见以下模型类的外观:

public class User {
    private String born;
    private String first;
    private String last;

    public User() { }

    public User(String born, String first, String last) {
        this.born = born;
        this.first = first;
        this.last = last;
    }

    public String getBorn() { return born; }
    public void setBorn(String born) { this.born = born; }

    public String getFirst() { return first; }
    public void setFirst(String first) { this.first = first; }

    public String getLast() { return last; }
    public void setLast(String last) { this.last = last; }
}

您的其余代码是正确的。

不客气,诺兰!在这种情况下,请考虑通过点击投票箭头左侧的复选标记来接受我的答案。应该把颜色改成绿色。谢谢