【问题标题】:How to change a view after user clicked on a button and a Firestore document got updated?用户单击按钮并更新 Firestore 文档后如何更改视图?
【发布时间】:2019-10-16 21:20:23
【问题描述】:

所以基本上,当用户在我的应用程序中进行“高级”活动时,他会看到一个显示“购买高级”的按钮。当他单击它时,Firestore 中的文档会更新(从 false 到 true 的布尔值)并且按钮消失,而不是按钮出现 TextView。当用户导航回 MainActivity 并从那里再次导航到“高级”活动时,他再次看到“购买高级”按钮,这是我不想要的,因为他已经“购买”了它。问题是当用户单击按钮时,如何实现布局视图永久更改,因此当用户导航回活动时,他将无法再次购买。我不想让他看到按钮。

我应该使用在 Firestore 中的文档中单击后更改的布尔值(高级成员:true)来执行此操作吗?喜欢:如果文档显示“高级会员资格:true”设置按钮可见性消失等。这会在用户每次导航到 Activity 时对 Firestore 进行“读取”,有没有更好的方法?

这是我的购买按钮的onClickListener:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_premium_purchase);

        purchase = findViewById(R.id.card_view_premium_purchase);
        premiumTextView = findViewById(R.id.premium_purchase_success);

        premiumTextView.setVisibility(View.GONE);

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

                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                String username = user.getDisplayName();

                DocumentReference userRef = db.collection("User").document(username);

                // Set the "pro membership" to true
                userRef
                        .update("pro membership", true).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "DocumentSnapshot successfully updated!");
                        Toast.makeText(PremiumPurchaseActivity.this, "Guess Premium successfully bought", Toast.LENGTH_SHORT).show();
                        premiumTextView.setVisibility(View.VISIBLE);
                        purchase.setVisibility(View.GONE);
                    }
                })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Log.w(TAG, "Error updating document", e);
                            }
                        });
            }
        });
    }

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    实际上,您只需从 DocumentReference 中获取“pro members”字段的当前值并在您的活动 onResume 方法中相应地处理 UI。

    @Override
    public void onResume(){
    super.onResume();
    String username = user.getDisplayName();
    
    DocumentReference userRef =  db.collection("User").document(username);
    
    userRef.get().addOnCompleteListener(new 
                     OnCompleteListener<DocumentSnapshot>() {
                  @Override
                     public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        if (task.isSuccessful()) {
                            DocumentSnapshot document = task.getResult();
                            if (document != null) {
    
                            boolean membership = document.getBoolean("pro membership");
                            if(membership){
                               premiumTextView.setVisibility(View.VISIBLE);
                               purchase.setVisibility(View.GONE);
                                }
    
                               } else {
                                Log.d("LOGGER", "No such document");
                                  }
                               } else {
                                Log.d("LOGGER", "get failed with ", 
                                task.getException());
                               }
                            }
                           });
    
                         }
    

    【讨论】:

    • 我在boolean membership = document.getString("pro membership") 行中收到一个错误,即缺少分号,但是当我添加分号时,我收到以下错误:不兼容的类型:必需:找到布尔值:字符串
    • 好吧,我发现我必须使用 document.getBoolean
    • 我使用字符串是因为我不知道您为此使用布尔值。
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多