どのように表示するには、Androidのスタジオで火災ベースのリアルタイムデータベースからユーザーデータにログイン

アインシュタイン:

私はbloodgroupなど、名前、住所のように自分の情報を表示したいユーザーでログインに基づいて私のデータベース構造は、以下のようなものです。

ドナー:

 O+:
      einsein:
           name: einstein
           email: [email protected]
           bloodgroup: O+
           age: 20
           address: 11/237
 A-:
      thamizh:
           name: thamizh
           email: [email protected]
           bloodgroup: A-
           age: 21
           address: 11/23.
public class userinfo extends AppCompatActivity {

    TextView t1,t2,t3,t4,t5;
    DatabaseReference oref;
    FirebaseAuth auth;
    FirebaseUser user;
    String uid,email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_userinfo);

        auth = FirebaseAuth.getInstance();
        user = auth.getCurrentUser();
        uid = user.getUid();
        email = user.getEmail();
        t1 = (TextView) findViewById(R.id.l11);
        t2 = (TextView) findViewById(R.id.l22);
        t3 = (TextView) findViewById(R.id.l33);
        t4 = (TextView) findViewById(R.id.l44);
        t5 = (TextView) findViewById(R.id.l55);

        oref = FirebaseDatabase.getInstance().getReference().child("Donor");
        oref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String  name = dataSnapshot.child("donorID").getValue().toString();
                String  bldgrp = dataSnapshot.child("bloodgroup").getValue().toString();
                String  mob = dataSnapshot.child("mobile").getValue().toString();
                String  eid = dataSnapshot.child("email").getValue().toString();
                String  add = dataSnapshot.child("address").getValue().toString();
                t1.setText(name);
                t2.setText(bldgrp);
                t3.setText(mob);
                t4.setText(eid);
                t5.setText(add);

                }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}
フランクPuffelen:

今、あなたのコードは、データベースからすべてのユーザーをロードし、その後、それらのユーザーからの1のプロパティを読み取ろうとしている/Donorノード。それは動作しません。

非常に少なくとも、あなたはあなたのユーザーをループする必要がありますonDataChange

oref = FirebaseDatabase.getInstance().getReference().child("Donor");
oref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshots) {
        for (DataSnapshot dataSnapshot: snapshots.getChildren()) {
            String  name = dataSnapshot.child("donorID").getValue().toString();
            String  bldgrp = dataSnapshot.child("bloodgroup").getValue().toString();
            String  mob = dataSnapshot.child("mobile").getValue().toString();
            String  eid = dataSnapshot.child("email").getValue().toString();
            String  add = dataSnapshot.child("address").getValue().toString();
            t1.setText(name);
            t2.setText(bldgrp);
            t3.setText(mob);
            t4.setText(eid);
            t5.setText(add);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

上記のコードはまだからすべての子ノードを取得します/Donorが、今はそれらを介してループし、テキストビューでプロパティを設定します。あなたが唯一のユーザのためのテキストビューを持っているので、あなたは、以前の値たびに上書きされます。だから、最後に、あなたはJSONからの最後のユーザーのプロパティを持っています。それはあなたが望むものではないが、少なくともそれは、より良いあなたが現在持っているものよりもです。


次はあなたが表示することを単一のユーザーのためのデータだけをロードしています。これは、あなたがその単一のユーザーを識別できることが必要です。

これを行うための最も一般的な方法は、そのユーザのUIDの下で、データベースにデータを格納することです。そう:

Users: {
  "uidOfUser1": { ... },
  "uidOfUser2": { ... },
  "uidOfUser3": { ... }
}

このタイプの構造を使用すると、現在と、ユーザーに署名のためのデータへの参照を取得することができます:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
oref = FirebaseDatabase.getInstance().getReference()
                       .child("Donor")
                       .child(uid);

あなたはこのリファレンスにリスナーを追加した場合、あなたが唯一のユーザのためにデータをロードしているので、あなたは、私たちが追加したループを削除することができます。


葉その質問:あなたは自分のUIDの下で、ユーザ情報を格納していなかった場合はどうしますか?その場合は、私が最初のUIDの下でユーザデータを記憶するものとして、データの再構築を検討をお勧めしたいことは、迅速かつ簡単に検索取得するための慣用的な方法です。

しかし、時にはあなたは本当に再構築、及びその場合には、あなたは、ユーザーのためのノード(複数可)を見つけるために、データベースクエリを実行することができます。クエリを使用できるようにするには、ユーザーの1(好ましくは一意の)プロパティの値を知っている必要があります。

あなたは自分のメールアドレスを知っていると言います。その後、そのメールアドレスを持つためのノード(複数可)を取得することができます:

FirebaseDatabase.getInstance().getReference()
                .child("Donor")
                .orderByChild("email").equalTo("[email protected]");

このクエリにリスナーを添付するとき、あなたは我々が上記追加したforループと同じに必要なので、再度、複数の結果を得ることができます。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=409308&siteId=1