2016-11-09 10 views
1

FIREBASE DATABASE私はFirebaseデータを取得することができていますが、

私はFirebaseからデータを読み取ることができるが、私は、ArrayListに値(項目)を追加しようとすると、アイテムがnull値であるをArrayListに追加することはできません。..

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 

Item.java

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 
+0

問題は何ですか? '(Item)data.getValue(Item.class);'はnullを返しますか? –

+0

はい... i =(Item)data.getValue(Item.class);無効である。私はスナップショットのcorrentデータを見ることができます..しかし、私はnullです... –

+0

さて、よく、私たちはあなたのFirebaseデータを見ることができないので、 'data.getValue'に関する何かがスナップショットデータをあなたのJavaオブジェクトに正しくマッピングしていません –

答えて

0

新しい9.x.x SDKを最初に使用した後、そのコードのほとんどをコメントアウトし、従来の2.5.x SDKを使用しているようです。しかし、コードにはcom.google.firebase.database.FirebaseDatabaseの宣言が含まれているため、build.gradleファイルにcompile 'com.google.firebase:firebase-database:9.8.0'のような新しいSDKへの参照を残しておく必要があります。従来のSDKと新しいSDKは互換性がなく、同じビルドでは使用できません。それがあなたが観察している問題の原因かもしれません。 1つのSDKまたは他のものを選択し、build.gradleおよびコードを更新して1つのみを使用するようにします。詳細は、Firebase Upgrade Guideを参照してください。

+0

私はすべてを試みましたが、まだ動作していません...アイテムがヌルです... –

0

あなたの問題はあなたの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 Classがデータベースからデータを取得しているとき、名前は完全に同じでなければならないので、何を取得するのかが分かります。

+0

まだ動作していません –

+0

解決策を得ました..あなたのお友達のおかげで.. –

+1

アイテムi = dataSnapshot1。 getValue(Item.class); 文字列fname = i.itemName; 文字列fprice = "Rs。" + i.itemPrice; items.add(新しい項目(fname、fprice)); –

関連する問題