首页 文章

如何使用firebase创建用户 Profiles 页面?

提问于
浏览
0

是否有可能在Android原生中创建用户配置文件页面而不使用任何其他SQL数据库因为我不擅长JSON .

我想创建两个活动,一个将向登录用户显示一个 Profiles 页面(firebase auth),另一个用户将创建第二个布局用于编辑 Profiles 以及添加 Profiles 图片,全名,年龄和地址的功能(我使用了firebase phone auth所以不需要使用电子邮件地址或密码) .

我试图获取用户ID并将其存储到新的集合中的firestore与其他属性,但它不适合我 .

2 回答

  • 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

    您可以尝试的是,您可以设置Firebase实时数据库并将值存储在其中,例如:username,imageURL,age和address .

    在你得到所有这些的输入后(我猜你可以完成这个,你自己) . 您可以使用以下代码将详细信息存储在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) {
    
                }
            });
    

    这也将触发您的配置文件类中的侦听器,并且它们将相应地更新 .

相关问题