简体   繁体   English

使用Android Studio和Firebase在Spinner中获取其选定的子值的键

[英]Getting the key of its selected child value in a Spinner using Android Studio and Firebase

I'm trying to get the key of a certain child value by allowing the user to choose from a Spinner. 我正在尝试通过允许用户从微调框中进行选择来获取某个子级值的键。

The Spinner has "Product_Name" values as its choices. 微调框具有“ Product_Name”值作为选择。 By choosing one, the program should get its key and use it to get another child value for other uses. 通过选择一个,程序应获取其密钥并使用它来获取另一个子值以用于其他用途。

Example: 例:

PRODUCTS-> -LoUXnfUCEj4k4A3dkte-> Product_Name:"Steak" 产品-> -LoUXnfUCEj4k4A3dkte->产品名称:“牛排”

By choosing "Steak" in the Spinner, I have to get "-LoUXnfUCEj4k4A3dkte" 通过在微调器中选择“牛排”,我必须获得“ -LoUXnfUCEj4k4A3dkte”

    databaseRefSelectItem = FirebaseDatabase.getInstance().getReference("PRODUCTS");

    final DatabaseReference mDatabase = databaseRefSelectItem;
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            //We create an array list to hold the values brought from the database and show them in the spinner
            final List<String> titleList = new ArrayList<String>();

            for(final DataSnapshot snapshot : dataSnapshot.getChildren()) {

                titleProduct = snapshot.child("Product_Name").getValue(String.class);

                //populate the spinner with that array list
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(AddTransactionActivity.this, android.R.layout.simple_spinner_item, titleList);
                arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                selectProduct.setAdapter(arrayAdapter);

                titleList.add(titleProduct);

                //Click event for each spinner element
                selectProduct.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        //pass the reference from that value into another snapshot in order to query those values, here you need to get your node id and inside just get your number , name and so on
                        selectItem = titleList.get(i);

                        mDatabase.child(selectItem).addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(final DataSnapshot dataSnapshot2) {

                                key = dataSnapshot2.getKey();

                                currentItemStock = dataSnapshot2.child(key).child("Current_Stock").getValue(String.class);
                                currentStk.setText(key);

                            }

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

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

How can I get "-LoUXnfUCEj4k4A3dkte"? 如何获得“ -LoUXnfUCEj4k4A3dkte”?

Notes: -LoUXnfUCEj4k4A3dkte is randomly generated. 注意:-LoUXnfUCEj4k4A3dkte是随机生成的。

Use .getKey() to get the key of the snapshot like: 使用.getKey()获取快照的密钥,例如:

for(final DataSnapshot snapshot : dataSnapshot.getChildren()) {
    if (snapshot.child("Product_Name").getValue(String.class).equals("Steak")){
        String theKey = snapshot.getKey(); //This will return -LoUXnfUCEj4k4A3dkte
    }
}

Will return key of the snapshot at that reference. 将在该参考处返回快照的密钥。

Found a solution. 找到了解决方案。 Thank you as well to Yash Krishan for the code snippet :). 也感谢Yash Krishan的代码段:)。

databaseRefSelectItem = FirebaseDatabase.getInstance().getReference("PRODUCTS");

    final DatabaseReference mDatabase = databaseRefSelectItem;
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            //We create an array list to hold the values brought from the database and show them in the spinner
            final List<String> titleList = new ArrayList<String>();

            for(final DataSnapshot snapshot : dataSnapshot.getChildren()) {
                titleProduct = snapshot.child("Product_Name").getValue(String.class);

                //populate the spinner with that array list
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(AddTransactionActivity.this, android.R.layout.simple_spinner_item, titleList);
                arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                selectProduct.setAdapter(arrayAdapter);

                titleList.add(titleProduct);

                //Click event for each spinner element
                selectProduct.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        //pass the reference from that value into another snapshot in order to query those values, here you need to get your node id and inside just get your number , name and so on
                        selectItem = titleList.get(i);

                        if (titleProduct.equals(selectItem)){
                            key = dataSnapshot.child(selectItem).getKey(); //This will return -LoUXnfUCEj4k4A3dkte
                        }

                        mDatabase.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull final DataSnapshot dataSnapshot2) {

                                for(final DataSnapshot snapshot : dataSnapshot.getChildren()) {
                                    if (snapshot.child("Product_Name").getValue(String.class).equals(selectItem)){
                                        key = snapshot.getKey().toString();
                                    }
                                    keyholder = dataSnapshot.child(key).child("Current_Stock").getValue(String.class);
                                }
                                currentStk.setText(keyholder);
                            }

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

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM