Извлечение данных в реальном времени из базы данных для указанного пользователя c - PullRequest
1 голос
/ 29 марта 2020

Ответ на этот вопрос был опубликован без ошибки PostIME здесь: Просмотр PostIME 0,1 ошибка при получении данных из firebase

Благодаря @Alex Mamo и @Peter Haddad

Спасибо @ Aka sh Starvin Dsouza за попытку.

Моя база данных:

enter image description here

Я дал ID для каждый пользователь. И я хочу получить данные указанного пользователя c, который в данный момент вошел в приложение. Я использую этот код, в котором я явно указываю узел под пользовательскими данными. Какие изменения необходимо сделать?

showb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                reference= FirebaseDatabase.getInstance().getReference().child("User Details").child("1");
                reference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        String namep=dataSnapshot.child("name").getValue().toString();
                        String heightp=dataSnapshot.child("height").getValue().toString();
                        String weightp=dataSnapshot.child("weight").getValue().toString();
                        String genderp=dataSnapshot.child("gender").getValue().toString();
                        String emailp=dataSnapshot.child("email").getValue().toString();
                        name.setText(namep);
                        height.setText(heightp);
                        weight.setText(weightp);
                        gender.setText(genderp);
                        mail.setText(emailp);
                    }

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

                    }
                });
            }
        });

    }

Код, используемый для СОХРАНЕНИЯ данных - идентификатор электронной почты, пол, рост, имя, вес:

msave=(Button)findViewById(R.id.save);

        msave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //n
                String uName= uname.getText().toString().trim();
                Float uHeight = Float.parseFloat(uheight.getText().toString().trim());
                Float uWeight = Float.parseFloat(uweight.getText().toString().trim());
                String uGender= ugender.getText().toString().trim();
                String uEmail=  msuser.getText().toString().trim();

                ud.setName(uName);
                ud.setHeight(uHeight);
                ud.setWeight(uWeight);
                ud.setGender(uGender);
                ud.setEmail(uEmail);
                reference.child(String.valueOf(maxid+1)).setValue(ud);
                //n

                final String email= msuser.getText().toString();

                String pwd=mspass.getText().toString();
                String cpwd=msconfpass.getText().toString();

                if(email.isEmpty()){
                    msuser.setError("Please enter email id");
                    msuser.requestFocus();
                }

                else if(pwd.isEmpty()){
                    mspass.setError("Please enter the password");
                    mspass.requestFocus();
                }
                else if(cpwd.isEmpty()){
                    msconfpass.setError("Please enter password again");
                    msconfpass.requestFocus();
                }
                else if(email.isEmpty() && pwd.isEmpty() && cpwd.isEmpty()){
                    Toast.makeText(Signup.this,"Fields are empty",Toast.LENGTH_SHORT).show();
                }
                else if(!cpwd.equals(pwd)){
                    Toast.makeText(Signup.this,"Please enter same password",Toast.LENGTH_SHORT).show();
                }
                else if(!(email.isEmpty() && pwd.isEmpty() && cpwd.isEmpty())){

                    mfirebase.createUserWithEmailAndPassword(email,pwd).addOnCompleteListener(Signup.this, new OnCompleteListener<com.google.firebase.auth.AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<com.google.firebase.auth.AuthResult> task) {
                            if(!task.isSuccessful()){
                                Toast.makeText(Signup.this,"Signup Unsuccessful",Toast.LENGTH_SHORT).show();
                            }
                            else
                            {

                                Toast.makeText(Signup.this,"Account Created Successfully and You're now logged in",Toast.LENGTH_SHORT).show();
                                finish();
                                startActivity(new Intent(Signup.this,Login.class));
                                //Toast.makeText(Signup.this,"Account Created Successfully",Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                }
                else{
                    Toast.makeText(Signup.this,"Error",Toast.LENGTH_SHORT).show();
                }
            }
        });

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Согласно вашему комментарию:

Я хочу, чтобы почта использовалась в качестве идентификатора. Как мне это сделать?

Для этого вы должны передать адрес электронной почты в ссылку при записи данных в Firestore. Поэтому, пожалуйста, измените следующую строку кода:

reference.child(String.valueOf(maxid+1)).setValue(ud);

На:

reference.child(uEmail).setValue(ud);

Таким образом, вы не будете иметь эти восходящие числа в качестве идентификаторов, а адрес электронной почты. Другим более подходящим подходом было бы использование в качестве уникального идентификатора uid, полученного в процессе аутентификации. Основная причина в том, что пользователь может изменить адрес электронной почты с течением времени, в то время как uid всегда будет одинаковым.

0 голосов
/ 29 марта 2020

попробуйте

reference= FirebaseDatabase.getInstance().getReference().child("User Details").orderByChild("email").equalTo("yyy@gmail.com");

Здесь «электронная почта» должна соответствовать значению ключа базы данных

orderByChild("email")

Вы должны получить идентификатор электронной почты, когда пользователь входит в систему, и передать его

equalTo(strEmailId)

Отправка данных

Intent intoHome=new Intent(Login.this,HomeActivity.class);
intoHome.putExtra("email_key", email);
startActivity(intoHome);

Получение данных

Bundle extras = getIntent().getExtras();
strRecivedEmail = extras.getString("email_key");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...