[英]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.