com.google.firebase.database.DatabaseException:找到两个对属性具有冲突区分大小写的getter或字段:user_name

时间:2017-08-02 18:19:04

标签: java android firebase firebase-realtime-database firebase-authentication

此代码在从Firebase数据库中提取数据时出错 在线

name="ABCD" connectionString="Data Source=DELL27\SQLSERVER2014;Initial Catalog=TMLS;User ID=saver;Password=Abc123" providerName="System.Data.SqlClient"  com.google.firebase.database.DatabaseException:找到两个对属性具有冲突区分大小写的getter或字段:user_name

UsersForChat usersForChat = dataSnapshot.getValue(UsersForChat.class);

这是Pojo Class UsersForChat

public class Users_Display_For_Chat_Activity extends AppCompatActivity {

    FirebaseAuth firebaseAuth;

    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;

    ArrayList<UsersForChat> users = new ArrayList<UsersForChat>();

    RecyclerView recyclerView;
    UsersDispalyActivtyRecyclerViewAdapter rvadapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat_);

        firebaseAuth = FirebaseAuth.getInstance();

        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference();

        rvadapter = new UsersDispalyActivtyRecyclerViewAdapter(this,users);



        recyclerView = (RecyclerView) findViewById(R.id.rv_UsersForChat);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(rvadapter);

        retrivedata();
    }

    public void retrivedata()
    {
        databaseReference.child("Users").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                UsersForChat usersForChat = dataSnapshot.getValue(UsersForChat.class);
                users.add(usersForChat);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

2 个答案:

答案 0 :(得分:1)

如果您处于项目的开头且可以进行数据库更改,我建议您根据Java Naming Convention更改所有字段名称,设置者和getter小写。

此外,您需要将所有字段的展示次数从default access更改为private access,如下所示:

private String userName, userPhoneNo, userProfilePicUrl;

这样的制定者和吸气者:

public void setUserEmail(String userEmail) {this.userEmail = userEmail;}    
public String getUserEmail() {return userEmail;}

public String getUserPhoneNo() {return userPhoneNo;}
public void setUserPhoneNo(String userPhoneNo) {this.userPhoneNo = userPhoneNo;}

public String getUserProfilePicUrl() {return userProfilePicUrl;}
public void setUserProfilePicUrl(String userProfilePicUrl) {this.userProfilePicUrl = userProfilePicUrl;}

正如您可能看到的那样,只有setter和getter才有public access

如果您无法更改数据库中字段的名称,则只需更改文件的可见性即可。

答案 1 :(得分:0)

当您制作POJO时,通常会将所有字段设为私有,以便仅通过getter和setter强制访问。

private String User_Name,User_PhoneNo,User_Profile_Pic_Url;

此外,传统上,您不会在方法名称和成员中使用下划线,只需使用驼峰。但我认为这取决于你。