Android DatabaseException检索数据时出错

时间:2017-09-05 03:52:29

标签: android firebase firebase-realtime-database

我正在尝试学习如何将Firebase实现到以前使用过SQL数据库的现有项目中。我的写代码工作正常,但我的读取是在下面抛出DatabaseException错误。

  

com.google.firebase.database.DatabaseException:发现有冲突   名字的setter:setWallpaper(与setWallpaper定义的冲突   在android.content.ContextWrapper上)

我做了很多研究,只能在写入数据库时​​找到对此错误的引用,而不是从中读取,所以我很困惑我在代码中可能做了什么导致此错误即将发生。方法代码如下。

protected void lastFive() {
    final DatabaseReference gameRef = database.getReference("Games");
    final List<User> gamesList = new ArrayList<>();
    gameRef.orderByChild("Date").limitToLast(5).addValueEventListener (new ValueEventListener ( ) {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            gamesList.clear ();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren ()){
                User user = postSnapshot.getValue(User.class);
                gamesList.add (user);
                System.out.println(user.getName () + " : " + user.getScore ());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}

错误似乎引用的方法中的行是:

User user = postSnapshot.getValue(User.class);

我只在Android上工作了几个月,Firebase不到一半,所以有可能会出现一些明显的错误,我根本看不到。 FWIW,此方法旨在显示应用程序上播放的最近5场比赛的用户名和分数。我有点担心输出会是什么样的,我知道这个问题超出了这个问题的范围,但是在我能读取数据之前我甚至无法解决这个问题。非常感谢任何帮助或建议。

按要求添加用户代码。

public class User extends Application {

    //private variable
    private static User globalVar;

    //variables
    String _id;
    String _name;
    int _score;
    String _date;
    String _email;

    // Empty constructor
    public User(){}

    // constructor
    public User(String id, String name, int score, String date){
        this._id = id;
        this._name = name;
        this._score = score;
        this._date = date;
    }

    public User(String id, int score){
        this._id = id;
        this._score = score;
    }

    public User(String id){
        this._id = id;
    }

    public User(int score, String date){
        this._score = score;
    }

    // getting ID
    public String getID(){
        return this._id;
    }

    // setting id
    public void setID(String id){
        this._id = id;
    }

    // getting name
    public String getName(){
        return this._name;
    }

    // setting name
    public void setName(String name){
        this._name = name;
    }

    // getting scores
    public int getScore(){ return this._score; }

    // setting scores
    public void setScore(int score){ this._score = score; }

    // getting name
    public String getDate(){
        return this._date;
    }

    // setting name
    public void setDate(String date){
        this._date = date;
    }

    // getting email
    public String getEmail(){
        return this._email;
    }

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

    public static synchronized User getGlobalVar(){
        if(globalVar == null){
            globalVar = new User();
        }
        return globalVar;
    }
}

1 个答案:

答案 0 :(得分:1)

如果发布了例外情况,我可以得出结论,您的User.class字段中没有getter / setter。理想情况下,您的User class应该是:

   public class User{
   private String name;

   public String getName(){
   return name;
   }

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

请以这种方式验证您是否有班级结构。