Android 如何根据firebase数据库的值启用和禁用按钮

Android 如何根据firebase数据库的值启用和禁用按钮,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在设置一个新的在线商店应用程序,并希望在firebase数据库中的值“state”为“Not Payments”时设置一个条件,以启用按钮MyConfigPayments和MYShowOrderBtn。若firebase数据库中的“状态”值为“等待付款确认”,则禁用MyConfigPayments按钮 public class MyOrdersActivity extends AppCompatActivity { private RecyclerView myOrderList;

我正在设置一个新的在线商店应用程序,并希望在firebase数据库中的值“state”为“Not Payments”时设置一个条件,以启用按钮MyConfigPayments和MYShowOrderBtn。若firebase数据库中的“状态”值为“等待付款确认”,则禁用MyConfigPayments按钮

public class MyOrdersActivity extends AppCompatActivity {

    private RecyclerView myOrderList;
    private Query myOrdersRef;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_orders);

        myOrdersRef = FirebaseDatabase.getInstance().getReference()
                .child("Orders")
                .orderByKey().equalTo(Prevalent.currentOnlineUser.getPhone());

        myOrderList = findViewById(R.id.myOrders_list);
        myOrderList.setLayoutManager(new LinearLayoutManager(this));
    }

    @Override
    protected void onStart()
    {
        super.onStart();


        FirebaseRecyclerOptions<UserOrders> options =
                new FirebaseRecyclerOptions.Builder<UserOrders>()
                        .setQuery(myOrdersRef, UserOrders.class)
                        .build();

        FirebaseRecyclerAdapter<UserOrders,MyOrdersActivity.UserOrdersViewHolder> adapter =
                new FirebaseRecyclerAdapter<UserOrders, MyOrdersActivity.UserOrdersViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull MyOrdersActivity.UserOrdersViewHolder holder, final int position, @NonNull final UserOrders model)
                    {
                        holder.MYuserName.setText("Nama : " + model.getName());
                        holder.MYuserPhoneNumber.setText("Nomor Telepon : " + model.getPhone());
                        holder.MYuserTotalprice.setText("Total Harga = Rp " + model.getTotalAmount());
                        holder.MYuserDateTime.setText("Dipesan Pada: " + model.getDate() + " " + model.getTime());
                        holder.MYusershippingAddress.setText("Alamat: " + model.getAddress() + ", " + model.getCity());
                        holder.MYorderstate.setText("Status: "+ model.getState());

                        holder.MYconfirmPayments.setOnClickListener( new View.OnClickListener() {
                            @Override
                            public void onClick(View view)
                            {
                                String uID = getRef(position).getKey();

                                Intent intent = new Intent(MyOrdersActivity.this, ConfirmPaymentsActivity.class);
                                intent.putExtra("uid", uID);
                                startActivity(intent);
                            }
                        });

                        holder.MYshowOrderBtn.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view)
                            {
                                String uID = getRef(position).getKey();

                                Intent intent = new Intent(MyOrdersActivity.this, AdminUserProductsActivity.class);
                                intent.putExtra("uid", uID);
                                startActivity(intent);
                            }
                        });

                        holder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view)
                            {
                                CharSequence options[] = new CharSequence[]
                                        {
                                                "Ya",
                                                "Tidak"
                                        };

                                AlertDialog.Builder builder = new AlertDialog.Builder(MyOrdersActivity.this);
                                builder.setTitle("Sudah Menerima Barang ini ?");

                                builder.setItems(options, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i)
                                    {
                                        if (i == 0)
                                        {
                                            String uID = getRef(position).getKey();


                                            RemoverOrder(uID);
                                        }
                                        else
                                        {
                                            finish();
                                        }
                                    }
                                });
                                builder.show();
                            }
                        });
                    }

                    @NonNull
                    @Override
                    public MyOrdersActivity.UserOrdersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
                    {
                        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.orders_layout, parent, false);
                        return new MyOrdersActivity.UserOrdersViewHolder(view);
                    }
                };
        myOrderList.setAdapter(adapter);
        adapter.startListening();
    }


    public static class UserOrdersViewHolder extends RecyclerView.ViewHolder
    {
        public TextView MYuserName, MYuserPhoneNumber, MYuserTotalprice, MYuserDateTime, MYusershippingAddress, MYorderstate;
        public Button MYconfirmPayments, MYshowOrderBtn;
        public UserOrdersViewHolder(View itemView)

        {
            super(itemView);


            MYuserName = itemView.findViewById(R.id.myOrders_user_name);
            MYuserPhoneNumber = itemView.findViewById(R.id.myOrders_phone_number);
            MYuserTotalprice = itemView.findViewById(R.id.myOrders_total_price);
            MYuserDateTime = itemView.findViewById(R.id.myOrders_date_time);
            MYusershippingAddress = itemView.findViewById(R.id.myOrders_address_city);
            MYorderstate = itemView.findViewById(R.id.myOrders_state);
            MYconfirmPayments = itemView.findViewById(R.id.myConfirm_payments);
            MYshowOrderBtn= itemView.findViewById(R.id.myShow_all_products);
        }
    }

    private void RemoverOrder(String uID)
    {

    }
}
这是我的Firebase数据库结构


您可以使用以下代码:

database=FirebaseDatabase.getInstance().getReference(); database.child(“Orders”).addListenerForSingleValueEvent(新值EventListener(){


使用此代码时会发生什么?您无法从firebase db获取状态吗?在onBindViewHolder中,您正在设置click listeners on button,但未设置isEnabled。我正在添加此代码,并收到错误“java.lang.NullPointerException:尝试调用virtual metod'void android.widget.button.setEnabled(布尔值)“在空对象引用上”您需要添加:Button myConfigrmPayments=findViewById(R.id.myConfigrmPayments)以及另一个按钮:Button myShowOrderBtn=findViewById(R.id.myShowOrderBtn),并且按钮的名称应以小写字母开头
public class UserOrders
{
    private String name, phone, address, city, state, date, time, totalAmount;

    public UserOrders()
    {

    }

    public UserOrders(String name, String phone, String address, String city, String state, String date, String time, String totalAmount) {
        this.name = name;
        this.phone = phone;
        this.address = address;
        this.city = city;
        this.state = state;
        this.date = date;
        this.time = time;
        this.totalAmount = totalAmount;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(String totalAmount) {
        this.totalAmount = totalAmount;
    }
}
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot userDataSnapshot : dataSnapshot.getChildren()) {

                UserOrders order = userDataSnapshot.getValue(UserOrders.class);
                String state = order .getState();

                if (state.equals("Not Payments")) {
                   MYConfirmPayments.setEnabled(true);
                   MYShowOrderBtn.setEnabled(true);
                }else if (state.equals("Not Payments")){
                   MYConfirmPayments.setEnabled(false);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w("tag", "loadPost:onCancelled", databaseError.toException());
        }
    });