Diego Pereira
Diego Pereira

Reputation: 25

Retrieve other values of child

Firebase Structure So, I have this Firebase Structure.

I made an autocompletetext to get all child named "alimento". That's OK!

But now, based on this "alimento" selection, I want to get all other childs in TextViews referent to this selection.

Is It possible? I don't know If I was clear enough.

This is my code: (I tried a lot of stuff, but all always return 0.00, so I won't put anything)

public class MainActivity extends AppCompatActivity {

    private Button btnList, buttonAdicionar;

    private AutoCompleteTextView autoCompleteTextView;

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

        btnList = (Button) findViewById(R.id.btnList);
        buttonAdicionar = (Button) findViewById(R.id.buttonAdicionar);

        //Nothing special, create database reference.
        final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
        //Create a new ArrayAdapter with your context and the simple layout for the dropdown menu provided by Android
        final HRArrayAdapter<String> adapter = new HRArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line);
        //Child the root before all the push() keys are found and add a ValueEventListener()
        database.child("alimentos").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                adapter.clear();
                //Basically, this says "For each DataSnapshot *Data* in dataSnapshot, do what's inside the method.
                for (DataSnapshot suggestionSnapshot : dataSnapshot.getChildren()){
                    //Get the suggestion by childing the key of the string you want to get.
                    String autocomplete = suggestionSnapshot.child("alimento").getValue(String.class);

                    adapter.add(autocomplete);
                    adapter.notifyDataSetChanged();

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.acTV);
        autoCompleteTextView.setAdapter(adapter);
        autoCompleteTextView.setThreshold(1);



        autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final String alimento = (String) parent.getItemAtPosition(position);

                Log.d("TAG", alimento);

                Toast.makeText(getApplicationContext(), alimento,   Toast.LENGTH_SHORT).show();

              
            }


        });


        btnList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), FoodActivity.class));

            }
        });

        buttonAdicionar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), NewAlimentoActivity.class));
            }
        });


    }

}

This is an example that what I want (using SQL): Example

Upvotes: 1

Views: 25

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598728

If you're asking how to get all child nodes with a specific value in their alimento property, that'd be something like:

database.child("alimentos")
        .orderByChild("alimento")
        .equalTo("Arroz, integral, cozido")
        .addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()){
            String base = snapshot.child("base").getValue(String.class);
            double baseValue = Double.parseDouble(base);
            ...
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

Upvotes: 1

Related Questions