Reputation: 31
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
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