2017-09-05 7 views
1

以前はSQLデータベースを使用していた既存のプロジェクトにFirebaseを実装する方法を学習しようとしています。私は正しく動作するコードを書いているが、私の読書は以下のDatabaseExceptionエラーを投げている。データの取得時にAndroid DatabaseExceptionエラーが発生しました

com.google.firebase.database.DatabaseException:競合 名前のセッターが見つかりました: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; 
    } 
} 
+2

Userクラスのソースコードを表示してください。 –

+1

ユーザーのモデルクラスを追加してください。そこに問題があるようです。あなたはそれを取得する前に火事ベースのDBに値を入れていますか? –

+0

このコードを実行する前に、ユーザコードが追加され、値がFBに追加されます。理想的には、ポップアップウィンドウにポップアップウィンドウが表示され、DBが空のときに "No games played"というメッセージが表示されるようにしたいのですが、これは一度データを正常に取得する方法を理解していることです。 –

答えて

1

私はあなたがあなたのUser.class内のフィールドのgetter/setterを持っていないと結論付けることができました。あなたはこのようにクラス構造を持っているかどうか確認してください

public class User{ 
    private String name; 

    public String getName(){ 
    return name; 
    } 

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

:理想的には、あなたのUser classは次のようにする必要があります。

+0

メインクラスにユーザークラス構造を追加しました。すみません、私は最初からやっていないと思いました。 –

+0

Applicationクラスとは何ですか?それはAndroidのApplicationクラスですか? –

+0

コード内でデータを先に送信しているときにグローバル変数を渡すために、UserクラスがApplicationクラスとして設定されています。 –

関連する問題