我无法通过TextView的用户输入从Firebase数据库检索数据

dwiayu电梯:

任何人都可以帮助我。我不知道该怎么办才能解决我的问题。

我无法从Firebase数据库检索数据。我在android studio中使用Java语言。我想显示数据库中为“ kode”的“ Kode barang”和数据库中为“ harga”的“ Harga Barang”。所有这些都将通过用户输入“ Nama barang”显示,该输入在数据库中为“ nama”。

屏幕截图表格

如果我试图在“ Nama barang”中输入数据,而该数据与数据库中“ nama”中的数据值相同,然后输入“ jumlah beli”(英语:数量),然后单击“ Cek”(英语:check”),我的应用被强制关闭。

我的数据库结构

这是片段类

    public class TransPenjFragment extends Fragment {
    TextView autotgl;
    TextView tvkdbrg;
    TextView tvhrgbrg;
    TextView totalpj;
    EditText edtTextnamabrg;
    EditText edtTextjmlbeli;
    Button btnCek, btnProses, btnHapus;
    private FirebaseDatabase firedb;
    private DatabaseReference myRef;
    private ArrayList<BarangDB> daftarbarang;
    private PenjualanAdapter adapter;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ValueEventListener valueEventListener;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_trans_penj, container, false);
        tabLayout = view.findViewById(R.id.tabLayout);
        viewPager = view.findViewById(R.id.viewPager);
        autotgl = view.findViewById(R.id.autotgl);
        tvkdbrg = view.findViewById(R.id.tvkdbrg);
        tvhrgbrg = view.findViewById(R.id.tvhrgbrg);
        totalpj = view.findViewById(R.id.total);
        edtTextnamabrg = view.findViewById(R.id.edtTextnamabrg);
        edtTextjmlbeli = view.findViewById(R.id.edtTextjmlbeli);
        btnCek = view.findViewById(R.id.btnCek);
        btnProses = view.findViewById(R.id.btnProses);
        btnHapus = view.findViewById(R.id.btnHapus);

        FirebaseApp.initializeApp(getActivity());
        firedb = FirebaseDatabase.getInstance();
        myRef = firedb.getReference();

        btnCek.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String namabrg = edtTextnamabrg.getText().toString().trim();
                myRef = firedb.getInstance().getReference().child("Barang");
                Query check = myRef.orderByChild("nama").equalTo(namabrg);
                check.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if(snapshot.exists()){
                            BarangDB barang = snapshot.getValue(BarangDB.class);
                            String namabrgfromDB = snapshot.child(namabrg).child("nama").getValue(String.class);
                            if(namabrgfromDB.equals(namabrg)){
                                tvkdbrg.setText(barang.getKode());
                                tvhrgbrg.setText(barang.getHarga());
                            }else{
                                Snackbar.make(btnCek, "Barang yang dimasukkan tidak ada di daftar barang",
                                        Snackbar.LENGTH_LONG).show();
                            }
                        }else{
                            Snackbar.make(btnCek, "Tidak tersedia",
                                    Snackbar.LENGTH_LONG).show();
                        }

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                        Toast.makeText(getActivity(), error.getDetails() + " "
                                + error.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

                String jmlbeli = edtTextjmlbeli.getText().toString().trim();

                double jb =Double.parseDouble(jmlbeli);
                double hb = Double.parseDouble(tvhrgbrg.getText().toString());
                double total = (jb*hb);

                totalpj.setText(" "+total);

            }
        });

edtTextnamabrgeditText从用户输入“ Nama barang”,使其与数据库中的“ nama”相同。

tvkdbrgtextView从数据库中检索数据“ Kode Barang”或“ kode”。

tvhrgbrgtextView从数据库中检索数据“ Harga barang”或“ harga”。

这是我的数据库模型

    public class BarangDB implements Serializable {
    private String kode;
    private String nama;
    private String harga;
    private String stok;
    private String key;

    public BarangDB(){ }

    public BarangDB (String kode, String nama, String harga, String stok){
        this.kode = kode;
        this.nama = nama;
        this.harga = harga;
        this.stok = stok;
    }

    public String getKey() { return key;}

    public void setKey(String key) { this.key = key; }

    public String getKode() { return kode;}

    public void setKode(String kode) { this.kode = kode; }

    public String getNama() { return nama; }

    public void setNama(String nama) { this.nama = nama; }

    public String getHarga() { return harga; }

    public void setHarga(String harga) { this.harga = harga; }

    public String getStok() { return stok; }

    public void setStok(String stok) { this.stok = stok; }

    @Override
    public String toString() {
        return " "+kode+"\n" + " "+nama+"\n" + " "+harga+ "\n" + " "+stok;
    }
    }

Logcat

    2020-07-25 23:07:30.250 20490-20490/com.example.aplikasiskripsi E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.aplikasiskripsi, PID: 20490
    java.lang.NumberFormatException: empty String
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
        at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
        at java.lang.Double.parseDouble(Double.java:538)
        at com.example.aplikasiskripsi.TransPenjFragment$1.onClick(TransPenjFragment.java:120)
        at android.view.View.performClick(View.java:6605)
        at android.view.View.performClickInternal(View.java:6582)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25897)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6762)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
珍妮(Jenea Vranceanu):

您正在尝试提取Barang具有键值对的键下的子nama: {value of namabrg}请注意,结果snapshot与您的BarangDB类结构不匹配snapshot将返回您的下一个结构:

实际返回值

这意味着您的BarangDB类必须包含另一个类型的变量Energen,该变量将包含其他变量(mode,harga,nama,stok)。

我看到您部分地理解了这一点,并且几乎正确了。

您需要更改两行。由此:

BarangDB barang = snapshot.getValue(BarangDB.class);
String namabrgfromDB = snapshot.child(namabrg).child("nama").getValue(String.class);

对此:

BarangDB barang = snapshot.child(namabrg).getValue(BarangDB.class);
String namabrgfromDB = barang.getNama();

它应该足够了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章