【问题标题】:How to get data from a child in Firebase Database?如何从 Firebase 数据库中的孩子那里获取数据?
【发布时间】:2022-02-09 14:28:03
【问题描述】:

我正在努力从我的数据库中的一个孩子那里获取数据以在 TextView 中设置文本。

这是我的数据库: Database

我认为问题在于我在Ansatte 之后没有 Uid,而是在 name 之后。 如果我拿走name,只剩下Ansatte,Uid 和其余的数据就可以了。

这是我获取数据的代码:

 databaseReference = FirebaseDatabase.getInstance("").getReference("Ansatte");
    btnadd = (findViewById(R.id.btn_leggtilansatt));

    mAuth = FirebaseAuth.getInstance();
    currentid = mAuth.getCurrentUser().getUid();




    tvtest = findViewById(R.id.tvtest);

    databaseReference.child(currentid).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            if (snapshot.exists()){
                String user = snapshot.child("name").getValue().toString();

                tvtest.setText(user);
            }
        }

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

        }
    });

这里是存储的代码:

private void add() {
    String name = editText1.getText().toString().trim();
    String email = editText2.getText().toString().trim();
    String storage = editText3.getText().toString().trim();
    String password = tv.getText().toString().trim();

    if (!TextUtils.isEmpty(name)){





        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {

                if (task.isSuccessful()){

                    Ansatt ansatt = new Ansatt (name, email, storage);

                    databaseAnsatt.child(name).child(mAuth.getUid()).setValue(ansatt);

                    Toast.makeText(getApplicationContext(), "Hei" , Toast.LENGTH_LONG).toString().trim();
                    Intent intent = new Intent(AddEmployeeActivity.this, MainActivity.class);
                    startActivity(intent);
                }
            }
        });

    }

【问题讨论】:

    标签: java firebase-realtime-database


    【解决方案1】:

    为了能够获取以下位置下存在的name字段的值:

    root/Ansatte/Name/$uid
    

    请使用以下代码行:

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference db = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = db.child("Ansatte").child("Name").child(uid);
    uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                DataSnapshot snapshot = task.getResult();
                String name = snapshot.child("name").getValue(String.class);
                tvtest.setText(name);
                Log.d("TAG", name);
            } else {
                Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
            }
        }
    });
    

    logcat 中的结果将是:

    name
    

    这个值也会被设置为你的tvtestTextView。


    附:不要忘记设置适当的安全规则。

    【讨论】:

    • 嗨,这有帮助。我接受了你的回答!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多