Firebase检索数据失败。

huangapple go评论127阅读模式
英文:

Firebase Retrieve Data Failed

问题

我遇到了这个错误:

  1. 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

我发现当我尝试将以下代码添加到我的代码中时出现了这个错误:

  1. di = mDatabase.getReference("transaction").child("Bill").child(id);

这是从Transaction子节点Bill数据库获取数据的整个代码:

  1. public class Bill extends AppCompatActivity {
  2. // ... (这里省略了一部分变量声明)
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. // ... (这里省略了一部分界面初始化的代码)
  7. // 初始化 Firebase 数据库
  8. mDatabase = FirebaseDatabase.getInstance();
  9. // ... (这里省略了一部分界面元素的初始化代码)
  10. // 获取 info 数据
  11. du = mDatabase.getReference("info");
  12. du.keepSynced(true);
  13. du.addListenerForSingleValueEvent(new ValueEventListener() {
  14. @Override
  15. public void onDataChange(DataSnapshot dataSnapshot) {
  16. // ... (这里省略了一部分处理 info 数据的代码)
  17. }
  18. @Override
  19. public void onCancelled(DatabaseError error) {
  20. }
  21. });
  22. Intent intent = getIntent();
  23. String id = intent.getStringExtra("key");
  24. // 获取 transaction 数据
  25. di = mDatabase.getReference("transaction").child("Bill").child(id);
  26. di.keepSynced(true);
  27. di.addListenerForSingleValueEvent(new ValueEventListener() {
  28. @Override
  29. public void onDataChange(DataSnapshot dataSnapshot) {
  30. // ... (这里省略了一部分处理 transaction 数据的代码)
  31. }
  32. @Override
  33. public void onCancelled(DatabaseError error) {
  34. }
  35. });
  36. }
  37. }

Firebase 数据库截图:

Firebase检索数据失败。

英文:

I get this error:

  1. 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

and I found out that when I try to add di = mDatabase.getReference("transaction").child("Bill").child(id); into my code.

This is the whole code to get data from Transaction child Bill database

  1. public class Bill extends AppCompatActivity {
  2. TextView ph1, ph2, storename, storeaddr, transid, dlnum, date, gst, ptname, age, docname, totamt, name;
  3. TextView medname[], unit[], batch[], qty[], rate[], exp[], amt[];
  4. String ids[];
  5. private DatabaseReference du;
  6. private DatabaseReference di;
  7. private FirebaseDatabase mDatabase;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. requestWindowFeature(Window.FEATURE_NO_TITLE);
  12. this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  13. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  14. setContentView(R.layout.invoice);
  15. getSupportActionBar().hide();
  16. ph1 = (TextView) findViewById(R.id.ph1);
  17. ph2 = (TextView) findViewById(R.id.ph2);
  18. storename = (TextView) findViewById(R.id.storename);
  19. storeaddr = (TextView) findViewById(R.id.storeaddr);
  20. transid = (TextView) findViewById(R.id.transid);
  21. dlnum = (TextView) findViewById(R.id.dlnum);
  22. date = (TextView) findViewById(R.id.date);
  23. gst = (TextView) findViewById(R.id.gst);
  24. ptname = (TextView) findViewById(R.id.ptname);
  25. age = (TextView) findViewById(R.id.age);
  26. docname = (TextView) findViewById(R.id.docname);
  27. totamt = (TextView) findViewById(R.id.totamt);
  28. name = (TextView) findViewById(R.id.name);
  29. medname = new TextView[4];
  30. qty = new TextView[4];
  31. amt = new TextView[4];
  32. ids = new String[] { "medname", "qty", "amt" };
  33. for (int j = 1; j <= 4; j++) {
  34. medname[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[0] + j, "id", getPackageName()));
  35. qty[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[1] + j, "id", getPackageName()));
  36. amt[j - 1] = (TextView) findViewById(getResources().getIdentifier(ids[2] + j, "id", getPackageName()));
  37. }
  38. du = mDatabase.getReference("info");
  39. du.keepSynced(true);
  40. du.addListenerForSingleValueEvent(new ValueEventListener() {
  41. @Override
  42. public void onDataChange(DataSnapshot dataSnapshot) {
  43. GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {
  44. };
  45. Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator);
  46. name.setText(map.get("name"));
  47. storename.setText(map.get("storename"));
  48. dlnum.setText(map.get("tin"));
  49. storeaddr.setText(map.get("addr"));
  50. ph1.setText("Ph: " + map.get("ph1"));
  51. ph2.setText("Ph: " + map.get("ph2"));
  52. gst.setText(map.get("gst"));
  53. }
  54. @Override
  55. public void onCancelled(DatabaseError error) {
  56. }
  57. });
  58. Intent intent = getIntent();
  59. String id = intent.getStringExtra("key");
  60. di = mDatabase.getReference("transaction").child("Bill").child(id);
  61. di.keepSynced(true);
  62. di.addListenerForSingleValueEvent(new ValueEventListener() {
  63. @Override
  64. public void onDataChange(DataSnapshot dataSnapshot) {
  65. GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {
  66. };
  67. Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator);
  68. totamt.setText(map.get("gtotamt"));
  69. date.setText(map.get("gdate"));
  70. String items = map.get("gitems");
  71. StringTokenizer st = new StringTokenizer(items, "®");
  72. int k = -1;
  73. while (st.hasMoreTokens()) {
  74. k++;
  75. // Toast.makeText(Bill.this,""+k , Toast.LENGTH_SHORT).show();
  76. StringTokenizer sti = new StringTokenizer(st.nextToken(), "©");
  77. while (sti.hasMoreTokens()) {
  78. medname[k].setText(sti.nextToken());
  79. qty[k].setText(sti.nextToken());
  80. amt[k].setText(sti.nextToken());
  81. }
  82. }
  83. }
  84. @Override
  85. public void onCancelled(DatabaseError error) {
  86. }
  87. });
  88. }
  89. }

Firebase Database:

Firebase检索数据失败。

答案1

得分: 0

你尚未声明getInstance()。尝试添加以下内容:

du = mDatabase.getInstance().getReference("info")

以及

di = mDatabase.getInstance().getReference("transaction").child("Bill").child(id)

我的意思是,当你遇到mDatabase时,在其后面加上getInstance()。然后告诉我更新情况。

英文:

you have not declared getInstance(). Try adding
du = mDatabase.getInstance().getReference("info") and
di =mDatabase.getInstance().getReference("transaction").child("Bill").child(id)
. I mean when you face a mDatabase add a getInstance() to it. And let me know the update.

huangapple
  • 本文由 发表于 2020年9月17日 21:50:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/63939541.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定