JULIANO VITO
JULIANO VITO

Reputation: 31

how to get values from selected item spinner (Android Studio to Firebase)

First of all, thankyou for clicking my question, hope you can help me to resolve my problem here :(

So, my problem is, i already success to get data from spinner "productname" and after that i want to get "productprice" references from selected item listener.. how to get "product price" ? because when i run the apps, its force closed. hope you can understand what i mean :(

Click here to see my firebase db

package com.example.chocolatte;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;

public class transaction_page extends AppCompatActivity {

    private DatabaseReference mDatabase;

    Button bt_min, bt_plus, btOvo, btGopay, btCash, btCheckout;
    TextView txtSumProduct, txtProductSelected;
    String selectedproductprice, selectedproduct;
    Spinner productSpinner;


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

        txtProductSelected = findViewById(R.id.txtProductSelected);

        mDatabase = FirebaseDatabase.getInstance().getReference();

        mDatabase.getRoot().child("PRODUCTS").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
                final List<String> products = new ArrayList<String>();

                for(DataSnapshot productsSnapshot: dataSnapshot.getChildren()) {
                    String productname = productsSnapshot.child("productname").getValue(String.class);
                    products.add(productname);
                }


                Spinner productSpinner = (Spinner) findViewById(R.id.spinner);
                final ArrayAdapter<String> productadapter = new ArrayAdapter<String>(transaction_page.this, android.R.layout.simple_spinner_dropdown_item, products);
                productadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                productSpinner.setAdapter(productadapter);

                productSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                        selectedproduct = productadapter.getItem(position);

                        mDatabase.equalTo(selectedproduct).addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                               selectedproductprice = dataSnapshot.child("productprice").getValue().toString();
                            }

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

                            }
                        });

                        txtProductSelected.setText(selectedproduct + " (@" + selectedproductprice + ")");

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {

                    }


                });
            }


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

            }


        });


    }
}

and this is for the report

2019-11-25 19:55:44.720 26470-26470/com.example.chocolatte E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.chocolatte, PID: 26470 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.example.chocolatte.transaction_page$1$1$1.onDataChange(transaction_page.java:69) at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75) at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63) at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

the output i expected is

example :

CREAMY CHOCOLATE (@10000)

Upvotes: 0

Views: 1320

Answers (1)

Peter Haddad
Peter Haddad

Reputation: 80924

Your reference is at the root node:

mDatabase = FirebaseDatabase.getInstance().getReference();

If you want to retrieve productprice, you need to do the following:

 mDatabase.child("PRODUCTS").child("PROD1").addValueEventListener(new ValueEventListener() {
    @Override
 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       selectedproductprice = dataSnapshot.child("productprice").getValue().toString();
       }

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

Here you add a reference to child PROD1 then you will be able to retrieve the child productprice.

Upvotes: 1

Related Questions