java - Android Firebase : Hashmap can't be cast to a given Object type

标签 java android firebase

我正在尝试查询 Firebase 数据库以检查用户是否存在,以便我可以登录他们。但是,一个奇怪的问题完全阻止了我:

查询代码

String email = emailEditText.getText().toString();
String password = emailEditText.getText().toString();

fbUsers.orderByChild("email").equalTo(email).limitToFirst(1).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        HashMap<String, User> usersHashMap = (HashMap<String, User>) dataSnapshot.getValue();

        Map.Entry<String, User> firstEntry = usersHashMap.entrySet().iterator().next();
        User foundUser = firstEntry.getValue();

        Log.d("Login: ", foundUser.getEmail());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

用户类别

public class User {
    private String email;
    private String password;

    User() {}

    public User(String email, String password) {
        this.email = email;
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

奇怪的问题是编译器说ALL OK,但是在运行时环境中,这个异常是在Log.d()处抛出的

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.project.User

最佳答案

此代码使用 getChildren().iterator().next() 获取单个查询结果的快照。

fbUsers.orderByChild("email")
        .equalTo(email).limitToFirst(1)
        .addListenerForSingleValueEvent(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();

        if (iter.hasNext()) {
            User foundUser = iter.next().getValue(User.class);
            Log.d("Login: ", foundUser.getEmail());
        } else {
            Log.w("Login: ", "No match: " + email);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        if (databaseError != null) {
            Log.e("Login: ", "onCancelled: " + databaseError.getMessage());
        }
    }
});

关于java - Android Firebase : Hashmap can't be cast to a given Object type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602365/

相关文章:

java - 如何在TFS中构建java项目

java - PowerMockito : Test is constructing real object instead of mock in spite of whenNew

java - 可变原子引用是个坏主意吗?

android - 如何检查 Manifest.permission.MANAGE_EXTERNAL_STORAGE 是否被授予?

angularjs - 具有 OAuth 浏览器重定向方法的 AngularFire 无限 $digest 循环

ios - 来自 Amazon SNS 的 VoIP 推送

java - 使用等待和通知时如何修复 IllegalMonitorStateException?

android - 在 MotionLayout 中更改关键帧中的 alpha

java - 检索 POJO 中的 firebase hashmap 数据

javascript - angularfire 无法读取属性 facebook - 我如何在整个应用程序中继续使用 authData