繁体   English   中英

Firebase 检索数据失败

[英]Firebase Retrieve Data Failed

我收到此错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.posinventory/com.example.posinventory.Bill}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.FirebaseDatabase.getReference(java.lang.String)' on a null object reference

我发现当我尝试添加di = mDatabase.getReference("transaction").child("Bill").child(id); 进入我的代码。

这是从 Transaction 子 Bill 数据库中获取数据的完整代码

public class Bill extends AppCompatActivity {
    TextView ph1, ph2, storename, storeaddr, transid, dlnum, date, gst, ptname, age, docname, totamt, name;
    TextView medname[], unit[], batch[], qty[], rate[], exp[], amt[];
    String ids[];
    private DatabaseReference du;
    private DatabaseReference di;
    private FirebaseDatabase mDatabase;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.invoice);
        getSupportActionBar().hide();

        ph1 = (TextView) findViewById(R.id.ph1);
        ph2 = (TextView) findViewById(R.id.ph2);
        storename = (TextView) findViewById(R.id.storename);
        storeaddr = (TextView) findViewById(R.id.storeaddr);
        transid = (TextView) findViewById(R.id.transid);
        dlnum = (TextView) findViewById(R.id.dlnum);
        date = (TextView) findViewById(R.id.date);
        gst = (TextView) findViewById(R.id.gst);
        ptname = (TextView) findViewById(R.id.ptname);
        age = (TextView) findViewById(R.id.age);
        docname = (TextView) findViewById(R.id.docname);
        totamt = (TextView) findViewById(R.id.totamt);
        name = (TextView) findViewById(R.id.name);

        medname = new TextView[4];
        qty = new TextView[4];
        amt = new TextView[4];

        ids = new String[] { "medname", "qty", "amt" };
        for (int j = 1; j <= 4; j++) {
            medname[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[0] + j, "id", getPackageName()));
            qty[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[1] + j, "id", getPackageName()));
            amt[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[2] + j, "id", getPackageName()));
        }


        du = mDatabase.getReference("info");
        du.keepSynced(true);
        du.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {
                };
                Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator);
                name.setText(map.get("name"));
                storename.setText(map.get("storename"));
                dlnum.setText(map.get("tin"));
                storeaddr.setText(map.get("addr"));
                ph1.setText("Ph: " + map.get("ph1"));
                ph2.setText("Ph: " + map.get("ph2"));
                gst.setText(map.get("gst"));
            }

            @Override
            public void onCancelled(DatabaseError error) {
            }
        });

        Intent intent = getIntent();
        String id = intent.getStringExtra("key");
        di = mDatabase.getReference("transaction").child("Bill").child(id);
        di.keepSynced(true);
        di.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {
                };
                Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator);
                totamt.setText(map.get("gtotamt"));
                date.setText(map.get("gdate"));
                String items = map.get("gitems");
                StringTokenizer st = new StringTokenizer(items, "®");
                int k = -1;
                while (st.hasMoreTokens()) {
                    k++;
                    // Toast.makeText(Bill.this,""+k , Toast.LENGTH_SHORT).show();
                    StringTokenizer sti = new StringTokenizer(st.nextToken(), "©");
                    while (sti.hasMoreTokens()) {
                        medname[k].setText(sti.nextToken());
                        qty[k].setText(sti.nextToken());
                        amt[k].setText(sti.nextToken());
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError error) {
            }
        });

    }


}

Firebase 数据库:

图片

您尚未声明 getInstance()。 尝试添加du = mDatabase.getInstance().getReference("info")di =mDatabase.getInstance().getReference("transaction").child("Bill").child(id) 我的意思是当你面对一个 mDatabase 时,向它添加一个 getInstance()。 并让我知道更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM