Android 我能够检索Firebase数据,但无法添加到ArrayList
我能够从Firebase读取数据,但当我尝试向ArrayList添加值(项)时,该项为Android 我能够检索Firebase数据,但无法添加到ArrayList,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我能够从Firebase读取数据,但当我尝试向ArrayList添加值(项)时,该项为nullvalue MainActivity.java 1 package com.example.digesh.divinecart; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.widget.GridView; 6
null
value
MainActivity.java
1 package com.example.digesh.divinecart;
2
3 import android.os.Bundle;
4 import android.support.v7.app.AppCompatActivity;
5 import android.widget.GridView;
6
7 import com.firebase.client.ChildEventListener;
8 import com.firebase.client.DataSnapshot;
9 import com.firebase.client.Firebase;
10 import com.firebase.client.FirebaseError;
11 import com.google.firebase.database.FirebaseDatabase;
12
13 import java.util.ArrayList;
14
15 public class MainActivity extends AppCompatActivity {
16
17 Item i = new Item();
18 GridView gridView;
19 ArrayList<Item> items = new ArrayList<Item>();
20 itemAdapter itemadapter;
21 FirebaseDatabase database;
22 //DatabaseReference mRef;
23 Firebase mRef;
24
25 @Override
26 protected void onCreate(Bundle savedInstanceState) {
27 super.onCreate(savedInstanceState);
28 setContentView(R.layout.activity_main);
29 Firebase.setAndroidContext(this);
30
31 //mRef = FirebaseDatabase.getInstance().getReference();
32
33 //mRef = database.getReference();
34 mRef = new Firebase("https://divinecart-9b58e.firebaseio.com/");
35
36
37 /* mRef.addValueEventListener(new ValueEventListener() {
38 @Override
39 public void onDataChange(DataSnapshot dataSnapshot) {
40 itemName = dataSnapshot.getValue(String.class);
41 name1 = (TextView)findViewById(R.id.name);
42 name1.setText(itemName);
43
44 }
45
46 @Override
47 public void onCancelled(FirebaseError firebaseError) {
48
49 }
50 });*/
51
52
53 gridView = (GridView) findViewById(R.id.gridview);
54
55
56 // itemAdapter itemadapter = new itemAdapter(MainActivity.this,image,itemName,itemPrice);
57 itemadapter = new itemAdapter(MainActivity.this, getItems());
58
59
60 gridView.setAdapter(itemadapter);
61 /*gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
62 @Override
63 public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
64 //String selectedItem = parent.getItemAtPosition(position).toString();
65 Intent i = new Intent(getApplicationContext(),itemdetails.class);
66 i.putExtra("Position",position);
67 startActivity(i);
68
69 //Toast.makeText(getApplicationContext(),itemName[position],Toast.LENGTH_LONG).show();
70 Toast.makeText(getApplicationContext(),itemName[position],Toast.LENGTH_LONG).show();
71
72 }
73 });*/
74 }
75
76 public void fetchData(DataSnapshot ds) {
77 items.clear();
78
79 for (DataSnapshot data : ds.getChildren()) {
80 //i = new Item();
81 //i = data.getValue(Item.class);
82 i = (Item) data.getValue(Item.class);
83 //i = (Item)data.getValue(Item.class);
84
85
86 items.add(i);
87 //System.out.println(i.getName());
88 //items.add(i.getName().toString(),i.getPrice().toString());
89 }
90 itemadapter.notifyDataSetChanged();
91
92 }
93
94 public ArrayList<Item> getItems() {
95 mRef.addChildEventListener(new ChildEventListener() {
96 @Override
97 public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
98
99 fetchData(dataSnapshot);
100 itemadapter.notifyDataSetChanged();
101 }
102
103 @Override
104 public void onChildChanged(DataSnapshot dataSnapshot, String s) {
105
106 fetchData(dataSnapshot);
107 itemadapter.notifyDataSetChanged();
108
109 }
110
111 @Override
112 public void onChildRemoved(DataSnapshot dataSnapshot) {
113
114 }
115
116 @Override
117 public void onChildMoved(DataSnapshot dataSnapshot, String s) {
118
119 }
120
121 @Override
122 public void onCancelled(FirebaseError firebaseError) {
123
124 }
125 });
126 return items;
127 }
128
129
130 }
131
1 package com.example.digesh.divinecart;
2
3 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4
5 /**
6 * Created by Digesh on 26-10-16.
7 */
8 @JsonIgnoreProperties(ignoreUnknown = true)
9 public class Item {
10 //private int image;
11 private String name;
12 private String price;
13
14 public Item() {
15
16
17 }
18
19 public Item(String name, String price){
20 //this.image = image;
21 super();
22 this.name = name;
23 this.price = price;
24
25 }
26
27
28
29 /* public int getImage(){
30 return image;
31 }
32 public void setImage(int image){
33 this.image = image;
34 }
35 */
36 public String getName(){
37 return name;
38 }
39 public void setName(String name){
40 this.name = name;
41 }
42
43 public String getPrice(){
44 return price;
45 }
46 public void setPrice(String price){
47 this.price = price;
48 }
49 }
50
看起来您最初使用了新的9.x.xSDK,然后注释掉了大部分代码,现在使用的是旧的2.5.xSDK。但是您必须在build.gradle文件中保留对新SDK的引用,例如
compile'com.google.firebase:firebase database:9.8.0'
,因为您的代码包含com.google.firebase.database.FirebaseDatabase
的声明。旧SDK和新SDK不兼容,不能在同一版本中使用。这可能是您正在观察的问题的原因。选择一个SDK或另一个,并更新build.gradle和代码以仅使用一个SDK。有关详细信息,请参阅。似乎您最初使用了新的9.x.x SDK,然后注释掉了大部分代码,现在使用的是旧的2.5.x SDK。但是您必须在build.gradle文件中保留对新SDK的引用,例如compile'com.google.firebase:firebase database:9.8.0'
,因为您的代码包含com.google.firebase.database.FirebaseDatabase
的声明。旧SDK和新SDK不兼容,不能在同一版本中使用。这可能是您正在观察的问题的原因。选择一个SDK或另一个,并更新build.gradle和代码以仅使用一个SDK。有关详细信息,请参见。您的问题在您的项目类中。您请求的值必须与数据库中的值完全匹配,该类应按如下方式更改
public class Item {
10 //private int image;
11 private String itemName;
12 private String itemPrice;
13
14 public Item() {
15
16
17 }
18
19 public Item(String itemName, String itemPrice){
20 //this.image = image;
21 super();
22 this.itemName = itemName;
23 this.itemPrice = itemPrice;
24
25 }
26
27
28
29 /* public int getImage(){
30 return image;
31 }
32 public void setImage(int image){
33 this.image = image;
34 }
35 */
36 public String getItemName(){
37 return itemName;
38 }
39 public void setName(String name){
40 this.itemName = itemName;
41 }
42
43 public String getItemPrice(){
44 return itemPrice;
45 }
46 public void setItemPrice(String itemPrice){
47 this.itemPrice = itemPrice;
48 }
49 }
这将使数据快照正常工作。当该Item类从数据库中提取数据时,名称必须完全相同,以便它知道要提取什么。您的问题在Item类中。您请求的值必须与数据库中的值完全匹配,该类应按如下方式更改
public class Item {
10 //private int image;
11 private String itemName;
12 private String itemPrice;
13
14 public Item() {
15
16
17 }
18
19 public Item(String itemName, String itemPrice){
20 //this.image = image;
21 super();
22 this.itemName = itemName;
23 this.itemPrice = itemPrice;
24
25 }
26
27
28
29 /* public int getImage(){
30 return image;
31 }
32 public void setImage(int image){
33 this.image = image;
34 }
35 */
36 public String getItemName(){
37 return itemName;
38 }
39 public void setName(String name){
40 this.itemName = itemName;
41 }
42
43 public String getItemPrice(){
44 return itemPrice;
45 }
46 public void setItemPrice(String itemPrice){
47 this.itemPrice = itemPrice;
48 }
49 }
这将使数据快照正常工作。当该Item类从数据库中提取数据时,名称必须完全相同,这样它就知道要提取什么。问题出在哪里<代码>(Item)data.getValue(Item.class)代码>返回空值?是。。。i=(Item)data.getValue(Item.class);是空的。我可以在快照中看到相应的数据。。但是我是空的…好吧,我们看不到你的Firebase数据,所以关于
数据的一些东西。getValue
没有正确地将你的快照数据映射到你的Java对象。我可以向你发送我的数据库的图片,但我不知道如何发送到这里。那么你能给我你的电子邮件吗。。所以我能做,不能做。请发布并使用提供的图像附件功能。问题是什么<代码>(Item)data.getValue(Item.class)代码>返回空值?是。。。i=(Item)data.getValue(Item.class);是空的。我可以在快照中看到相应的数据。。但是我是空的…好吧,我们看不到你的Firebase数据,所以关于数据的一些东西。getValue
没有正确地将你的快照数据映射到你的Java对象。我可以向你发送我的数据库的图片,但我不知道如何发送到这里。那么你能给我你的电子邮件吗。。所以我能做,不能做。请发布并使用提供的图像附件功能。Item i=dataSnapshot1.getValue(Item.class);字符串fname=i.itemName;字符串fprice=“Rs.”+i.itemPrice;添加(新项目(fname,fprice));Item i=dataSnapshot1.getValue(Item.class);字符串fname=i.itemName;字符串fprice=“Rs.”+i.itemPrice;添加(新项目(fname,fprice));