如何使用Firebase创建用户个人资料页面?

时间:2018-09-07 08:13:14

标签: android firebase firebase-authentication

是否有可能在android native中创建用户个人资料页面而无需使用任何其他SQL数据库,因为我对JSON不满意。

我想创建两个活动,一个将向登录的用户(firebase auth)显示一个配置文件页面,其他用户 第二种布局是用于编辑个人资料以及添加个人资料图片,全名,年龄和地址的功能(我使用了Firebase电话认证,因此无需使用电子邮件地址或密码)。

我试图获取用户ID,并将其与其他属性一起存储到Firestore的新集合中,但对我没有用。

2 个答案:

答案 0 :(得分:1)

像这样在Firestore中创建文档

DocumentReference docRef = firebaseFirestore.collection(userId).document("Profile");

    docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            if (documentSnapshot.exists()) {
                Log.v(TAG, "Profile exist");
                getProfileData();
            } else {
                Log.v(TAG, "Profile is not exist");
                firebaseFirestore.collection(userId).document("Profile").set(profileEntity);
            }
        }
    });

如果配置文件不存在,它将创建一个新的。 将数据存储在配置文件实体中,并保存在配置文件文档中。

如果配置文件存在:

private void getProfileData() {
    DocumentReference docRef = firebaseFirestore.collection(userId).document("Profile");
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document != null) {
                    ProfileEntity profileEntity = task.getResult().toObject(ProfileEntity.class);

                    if (profileEntity != null) {
                       //show your profile data
                    }
                } else {
                    Log.d(TAG, "No such document");
                }
            } else {
                Log.d(TAG, "get failed with ", task.getException());
            }
        }
    });
}

答案 1 :(得分:1)

您可以尝试的是,您可以设置Firebase实时数据库并在其中存储值,例如:用户名,imageURL,年龄和地址。

获得所有这些输入后(我想您可以自己完成此操作)。您可以使用以下代码将详细信息存储在Firebase数据库的users子级中:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("users");
DatabaseRefrence detailRef = ref.child(userName);
detailRef.child("age").setValue(age);
detailRef.child("imageURL").setValue(imageURL);
detailRef.child("address").setValue(address);

要在第二个活动中访问并显示上面的数据,您必须使用event-listeners,如下所示:

// for example you have to read and show the address of the user from database

userRef.child(Current_userName).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        String address = dataSnapshot.child("address").getValue(String.class);


                        }
                    }

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

                    }
                });

您可以执行此操作以读取所有数据并将其显示在您的个人资料活动中。 对于您希望他们编辑此数据的活动,您可以获取他们的输入并使用Maps更新数据库中的所有值,例如:

userRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                String identifier = userName;

                Map<String,Object> values = new HashMap<>();
                values.put("address", address);
                values.put("age",age);
                values.put("imageURL",newImageURL);

                userRef.child(identifier).updateChildren(values);

            }

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

            }
        });

这还将触发您的个人资料类中的侦听器,并将相应地对其进行更新。