我正在尝试学习如何将 Firebase 实现到以前使用 SQL 数据库的现有项目中。我的写入代码工作正常,但我的读取在下面抛出 DatabaseException 错误。
com.google.firebase.database.DatabaseException: Found a conflicting setters with name: setWallpaper (conflicts with setWallpaper defined on 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;
}
}
最佳答案
除了发布的异常,我可以得出结论,您的 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;
}
}
请验证您是否具有这种方式的类结构。
关于检索数据时Android DatabaseException错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46046761/