首先,感谢您点击我的问题,希望您能在这里帮助我解决问题:(
所以,我的问题是,我已经成功地从微调器“ productname”中获取数据,之后,我想从选定的项目侦听器中获取“ productprice”引用。如何获得“ product price”?因为当我运行应用程序时,它的作用力关闭了。希望你能理解我的意思:(
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) {
}
});
}
}
这是针对报告
2019-11-25 19:55:44.720 26470-26470 / com.example.chocolatte E / AndroidRuntime:FATAL EXCEPTION:main 流程:com.example.chocolatte,PID:26470 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()” 在com.example.chocolatte.transaction_page $ 1 $ 1 $ 1.onDataChange(transaction_page.java:69) com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database @@ 16.0.4:75) com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database @@ 16.0.4:63) com.google.firebase.database.core.view.EventRaiser $ 1.run(com.google.firebase:firebase-database @@ 16.0.4:55) 在android.os.Handler.handleCallback(Handler.java:789) 在android.os.Handler.dispatchMessage(Handler.java:98) 在android.os.Looper.loop(Looper.java:164) 在android.app.ActivityThread.main(ActivityThread.java:6541) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
我期望的输出是
示例:
奶油巧克力(@ 10000)
答案 0 :(得分:1)
您的引用位于根节点:
mDatabase = FirebaseDatabase.getInstance().getReference();
如果要检索productprice
,则需要执行以下操作:
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) {
}
});
在此处添加对子项PROD1
的引用,便可以检索子项productprice
。