Firebase"用户缺少没有参数的构造函数"

Nic*_*omb 10 java android firebase firebase-realtime-database

我正在尝试从Firebase中的/ User/tree中检索我的用户详细信息.我有以下User对象:

public class User {
    private String name;
    private String email;
    private FirebaseUser firebaseUser;
    private String lastOnline;
    private LatLng latLng;
    private ArrayList<SwapLocation> locations;

    public User(){ }

    public String getName(){
        if(firebaseUser.getDisplayName() != null && !firebaseUser.getDisplayName().equals(""))
            return firebaseUser.getDisplayName();

        if(name != null && !name.equals(""))
            return name;

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

    public String getEmail(){
        if(firebaseUser.getEmail() != null && firebaseUser.getEmail().equals(""))
            return firebaseUser.getEmail();

        if(email != null && email.equals(""))
            return email;

        return "";
    }
    public void setEmail(String email){
        this.email = email;
    }

    public void setFirebaseUser(FirebaseUser firebaseUser){
        this.firebaseUser = firebaseUser;  
    }
    public FirebaseUser getFirebaseUser(){
        return firebaseUser;
    }

    public void setLastOnline(String lastOnline){
        this.lastOnline = lastOnline;
    }
    public String getLastOnline(){
        if(lastOnline != null)
            return lastOnline;

        return "";
    }

    public void setLatLong(LatLng latlng){
        this.latLng = latlng;
    }
    public LatLng getLatLong(){
        return this.latLng;
    }

    public ArrayList<SwapLocation> getLocations(){
        return locations;
    }
    public void setLocations(ArrayList<SwapLocation> locations){
        this.locations = locations;
    } 
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试从Firebase中检索此对象.虽然在序列化到我的User对象时遇到问题,但是在dataSnapshot中检索该对象.

这是我从Firebase检索对象的方式:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(users_group).child(user.getUid());
        ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    User this_user = dataSnapshot.getValue(User.class); 
                }

                @Override
                public void onCancelled(DatabaseError databaseError) { }
            });
Run Code Online (Sandbox Code Playgroud)

但是当尝试执行'User this_user = dataSnapshot.getValue(User.class)'时,我收到错误消息"用户缺少没有参数的构造函数"

任何帮助都会很棒,谢谢

His*_*eer 34

您必须收到此错误,因为您的User类是一个子类.

解:

将您的类标记为静态:

 public class SomeParentClass{ 

        public static class User {
            ....
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者在单独的文件中创建它.


Kis*_*nki 25

我已经在kotlin中使用firebase实时数据库来解决这个问题并通过这个解决方案来解决它

对于Kotlin,如果你使用下面的数据类作为firebase,

data class UserModel(
        var UserName: String,
        var UserType: Int
)
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个错误

com.google.firebase.database.DatabaseException:UserModel未定义无参数构造函数.如果您使用的是ProGuard,请确保不剥离这些构造函数.

因此,您需要初始化其值.

data class UserModel(
        var UserName: String = "",
        var UserType: Int = 0
)
Run Code Online (Sandbox Code Playgroud)

  • 那很弱。谷歌什么鬼.. (2认同)