gpt4 book ai didi

java - 如何从所选项目微调器获取值(Android Studio 到 Firebase)

转载 作者:行者123 更新时间:2023-12-02 09:15:24 25 4
gpt4 key购买 nike

首先感谢您点击我的问题,希望您能帮助我解决我的问题:(

所以,我的问题是,我已经成功从微调器“产品名称”获取数据,之后我想从所选项目监听器获取“产品价格”引用..如何获取“产品价格”?因为当我运行应用程序时,它的强制关闭。希望你能明白我的意思:(

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 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)

我期望的输出是

示例:

奶油巧克力 (@10000)

最佳答案

您的引用位于根节点:

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

关于java - 如何从所选项目微调器获取值(Android Studio 到 Firebase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59032505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com