Я использовал Google Войти в аутентификации с FireBase и теперь я хочу, чтобы отобразить данные, сохраненные текущим пользователем, но это не работает - PullRequest
0 голосов
/ 03 марта 2020

Я использовал Google Sign в аутентификации с помощью firebase. когда пользователь google входит в приложение и сохраняет данные в базе данных, пользователь должен иметь возможность извлечь данные, которые они ранее сохранили, на основе своего идентификатора. это код для сохранения данных в firebase

public class UpdateMedicalProfile extends AppCompatActivity {

    FirebaseUser fuser;
    Intent intent;
    DatabaseReference reference;
    private Button updateProfilebtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_medical_profile);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        updateProfilebtn = findViewById(R.id.updateProfile);
        FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("Users");
        String userid =user.getUid();

        myRef.child(userid).setValue(user);

        updateProfilebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateDetails();
            }
        });

        //String Names = name.getText().toString();

        intent = getIntent();
        fuser = FirebaseAuth.getInstance().getCurrentUser();
        reference = FirebaseDatabase.getInstance().getReference();

    }


    public void updateMedicalProfile(String name, String age, String bloodgroup, String allergy ){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users Medicals");
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("name", name);
        hashMap.put("age", age);
        hashMap.put("bloodgroup", bloodgroup);
        hashMap.put("allergy", allergy);
        reference.child("Medical Info").push().setValue(hashMap);
    }

    public void updateDetails() {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        String userEmail = user.getEmail();
        EditText name = findViewById(R.id.name);
        EditText age = findViewById(R.id.age);
        EditText bloodgroup = findViewById(R.id.bloodgroup);
        EditText allergy = findViewById(R.id.allergy);

        String Names = name.getText().toString();
        String Ages = age.getText().toString();
        String bloodGroup = bloodgroup.getText().toString();
        String Allergy = allergy.getText().toString();
        String btnUpdateProfile = updateProfilebtn.getText().toString();


        if (!Names.isEmpty() && !Ages.isEmpty() && !bloodGroup.isEmpty() && !Allergy.isEmpty() && ! btnUpdateProfile.isEmpty() ) {
            updateMedicalProfile(Names, Ages, bloodGroup, Allergy);
            Toast.makeText(UpdateMedicalProfile.this,
                    "Profile Updated Successfully", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(UpdateMedicalProfile.this,
                    "You can't send an empty message", Toast.LENGTH_SHORT).show();
        }
        //  report.setText("");

    }
}

Это код для извлечения данных, которые указанный c пользователь сохранил

public class HomeFragment3 extends Fragment {
View homeView3;
private DatabaseReference databaseReference, rootRef;
private FirebaseUser firebaseUser;
private FirebaseAuth firebaseAuth;

TextView vName, vAge, vBloodGroup,vAllergy;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        homeView3 = inflater.inflate(R.layout.fragment_home_fragment3, container, false);

        vName = homeView3.findViewById(R.id.view_name);
        vAge =  homeView3.findViewById(R.id.view_age);
        vBloodGroup =  homeView3.findViewById(R.id.view_bloodGroup);
        vAllergy =  homeView3.findViewById(R.id.view_allergy);      

        rootRef = FirebaseDatabase.getInstance().getReference("Users Medicals");
        databaseReference = rootRef.child("Medical Info");
        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    String Name = ds.child("name").getValue(String.class);
                    String Age = ds.child("age").getValue(String.class);
                    String BloodGroup = ds.child("bloodgroup").getValue(String.class);
                    String Allergy = ds.child("allergy").getValue(String.class);
                    Log.d("TAG", Name + " / " + Age + " / " + BloodGroup + " / " + Allergy );
                    vName.setText(Name);
                    vAge.setText(Age);
                    vBloodGroup.setText(BloodGroup);
                    vAllergy.setText(Allergy);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        databaseReference.addListenerForSingleValueEvent(eventListener);





        return homeView3;
    }


}

пожалуйста, что я делаю не так

1 Ответ

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

Изменить это:

databaseReference.addListenerForSingleValueEvent(eventListener)

На это:

databaseReference.addValueEventListener(eventListener)

addListenerForSingleValueEvent будет извлекать данные только один раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...