2016-08-06 13 views
3

Firebaseにある/ User/treeからユーザーの詳細を取得しようとしています。私は以下のUserオブジェクトを持っています:Firebase "引数のないコンストラクタがユーザーにありません"

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; 
    } 
} 

このオブジェクトを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) { } 
      }); 

しかし、やろうとしている「ユーザーthis_user = dataSnapshot.getValue(User.class)」私はエラーは、ユーザーが欠落している「と言ってますあなたのUserクラスは、サブクラスであるため、引数なしのコンストラクタ」

すべてのヘルプは素晴らしいことだ、感謝

+1

「コンストラクタが見つかりません」というエラーが表示される理由を説明できません。しかし、 'FirebaseUse'rがあなたが定義した単純なPOJOではなく、実際には' com.google.firebase.auth.FirebaseUser'であれば、Firebaseはあなたの 'User'クラスを直列化/逆直列化することができません。そのクラスはシンプルなPOJOではなく、Firebaseシリアライザが扱えるように設計されていない機能をほぼ確実に備えています。 –

+3

あなたの 'User'クラスは別のクラスの中で定義されていることが素早く推測されます。そのような場合は、staticとしてマークします。 'static public class User {'。さらに、qbixがコメントしたように、 'FirebaseUser'がシリアライゼーションのためのデータベース要件を満たしているかどうかは疑いがありますので、それを' @ Exclude 'する必要があります。 –

+0

ああ、私は1つだけのUserオブジェクトがほしいからです。私は2つのオブジェクト、1つのFirebaseUserと1つのユーザが追加のプロパティを必要とするようです(ユーザはサードパーティの認証なしでログインできるので、名前、電話などの詳細はユーザのどこかに保存する必要があります' 木)。 代わりに、FirebaseをFireFoxに呼び出すときに、ユーザオブジェクトにFirebaseUserを格納し、それをユーザオブジェクトから取り除くことができます。あなたは何が最善の解決策になると思いますか? – Nickmccomb

答えて

22

あなたはこのエラーを取得する必要があります。

ソリューション:

静的クラスをマーク:

public class SomeParentClass{ 

     public static class User { 
      .... 
     } 
    } 

または別のファイルでそれを作成します。

+0

ありがとう、それは働いた! –

+0

これで私の問題は解決しました。このエラーメッセージは、あなたがデータベースのために作成したクラスの引数にコンストラクタが含まれていないかどうかにかかわらず、あなたがそれを取得するので、難しいです。このメッセージには、定義された場所と方法の実際の問題ではなく、クラス定義に関する問題が含まれています。 – Androidcoder

関連する問題