Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 21f2bca

Browse files
authored
Kotlin snippets for queries (firebase#11)
1 parent 4fc0fcd commit 21f2bca

File tree

3 files changed

+194
-10
lines changed

3 files changed

+194
-10
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.google.firebase.referencecode.database
2+
3+
import android.os.Bundle
4+
import android.support.v7.app.AppCompatActivity
5+
import android.util.Log
6+
import com.google.firebase.database.*
7+
import com.google.firebase.referencecode.database.interfaces.QueryActivityInterface
8+
import com.google.firebase.referencecode.database.models.Message
9+
10+
/**
11+
* Kotlin verison of {@link QueryActivity].
12+
*/
13+
class KotlinQueryActivity : AppCompatActivity(), QueryActivityInterface {
14+
15+
companion object {
16+
private val TAG = "KotlinQueryActivity"
17+
}
18+
19+
private lateinit var messagesRef: DatabaseReference
20+
private lateinit var databaseReference: DatabaseReference
21+
private lateinit var messagesQuery: Query
22+
23+
private lateinit var messagesListener: ValueEventListener
24+
private lateinit var messagesQueryListener: ChildEventListener
25+
26+
override fun onCreate(savedInstanceState: Bundle?) {
27+
super.onCreate(savedInstanceState)
28+
setContentView(R.layout.activity_query)
29+
30+
databaseReference = FirebaseDatabase.getInstance().reference
31+
}
32+
33+
override fun getUid(): String {
34+
return "42"
35+
}
36+
37+
override fun basicListen() {
38+
// [START basic_listen]
39+
// Get a reference to Messages and attach a listener
40+
messagesRef = databaseReference.child("messages")
41+
messagesListener = object : ValueEventListener {
42+
43+
override fun onDataChange(dataSnapshot: DataSnapshot) {
44+
// New data at this path. This method will be called after every change in the
45+
// data at this path or a subpath.
46+
47+
Log.d(TAG, "Number of messages: ${dataSnapshot.childrenCount}")
48+
dataSnapshot.children?.forEach { child ->
49+
// Extract Message object from the DataSnapshot
50+
val message: Message? = child.getValue(Message::class.java)
51+
52+
// Use the message
53+
// [START_EXCLUDE]
54+
Log.d(TAG, "message text: ${message?.text}")
55+
Log.d(TAG, "message sender name: ${message?.name}")
56+
// [END_EXCLUDE]
57+
}
58+
}
59+
60+
override fun onCancelled(error: DatabaseError) {
61+
// Could not successfully listen for data, log the error
62+
Log.e(TAG, "messages:onCancelled: ${error.message}")
63+
}
64+
}
65+
messagesRef.addValueEventListener(messagesListener)
66+
// [END basic_listen]
67+
}
68+
69+
override fun basicQuery() {
70+
// [START basic_query]
71+
// My top posts by number of stars
72+
val myUserId = uid
73+
val myTopPostsQuery = databaseReference.child("user-posts").child(myUserId)
74+
.orderByChild("starCount")
75+
76+
myTopPostsQuery.addChildEventListener(object : ChildEventListener {
77+
// TODO: implement the ChildEventListener methods as documented above
78+
// [START_EXCLUDE]
79+
override fun onChildAdded(dataSnapshot: DataSnapshot, s: String) {}
80+
81+
override fun onChildChanged(dataSnapshot: DataSnapshot, s: String) {}
82+
override fun onChildRemoved(dataSnapshot: DataSnapshot) {}
83+
override fun onChildMoved(dataSnapshot: DataSnapshot, s: String) {}
84+
override fun onCancelled(databaseError: DatabaseError) {}
85+
// [END_EXCLUDE]
86+
})
87+
// [END basic_query]
88+
}
89+
90+
override fun basicQueryValueListener() {
91+
val myUserId = uid
92+
val myTopPostsQuery = databaseReference.child("user-posts").child(myUserId)
93+
.orderByChild("starCount")
94+
95+
// [START basic_query_value_listener]
96+
// My top posts by number of stars
97+
myTopPostsQuery.addValueEventListener(object : ValueEventListener {
98+
override fun onDataChange(dataSnapshot: DataSnapshot) {
99+
for (postSnapshot in dataSnapshot.children) {
100+
// TODO: handle the post
101+
}
102+
}
103+
104+
override fun onCancelled(databaseError: DatabaseError) {
105+
// Getting Post failed, log a message
106+
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
107+
// ...
108+
}
109+
})
110+
// [END basic_query_value_listener]
111+
}
112+
113+
override fun cleanBasicListener() {
114+
// Clean up value listener
115+
// [START clean_basic_listen]
116+
messagesRef.removeEventListener(messagesListener)
117+
// [END clean_basic_listen]
118+
}
119+
120+
override fun cleanBasicQuery() {
121+
// Clean up query listener
122+
// [START clean_basic_query]
123+
messagesQuery.removeEventListener(messagesQueryListener)
124+
// [END clean_basic_query]
125+
}
126+
127+
override fun onStart() {
128+
super.onStart()
129+
basicListen()
130+
basicQuery()
131+
basicQueryValueListener()
132+
}
133+
134+
override fun onStop() {
135+
super.onStop()
136+
cleanBasicListener()
137+
cleanBasicQuery()
138+
}
139+
140+
}

database/app/src/main/java/com/google/firebase/referencecode/database/QueryActivity.java

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.firebase.database.FirebaseDatabase;
2727
import com.google.firebase.database.Query;
2828
import com.google.firebase.database.ValueEventListener;
29+
import com.google.firebase.referencecode.database.interfaces.QueryActivityInterface;
2930
import com.google.firebase.referencecode.database.models.Message;
3031

3132
/**
@@ -34,7 +35,7 @@
3435
*
3536
* Use {@link MainActivity} to populate the Message data.
3637
*/
37-
public class QueryActivity extends AppCompatActivity {
38+
public class QueryActivity extends AppCompatActivity implements QueryActivityInterface {
3839

3940
private static final String TAG = "QueryActivity";
4041

@@ -54,14 +55,13 @@ protected void onCreate(Bundle savedInstanceState) {
5455
databaseReference = FirebaseDatabase.getInstance().getReference();
5556
}
5657

57-
private String getUid() {
58+
@Override
59+
public String getUid() {
5860
return "42";
5961
}
6062

6163
@Override
62-
public void onStart() {
63-
super.onStart();
64-
64+
public void basicListen() {
6565
// [START basic_listen]
6666
// Get a reference to Messages and attach a listener
6767
mMessagesRef = databaseReference.child("messages");
@@ -93,8 +93,10 @@ public void onCancelled(DatabaseError error) {
9393
};
9494
mMessagesRef.addValueEventListener(mMessagesListener);
9595
// [END basic_listen]
96+
}
9697

97-
98+
@Override
99+
public void basicQuery() {
98100
// [START basic_query]
99101
// My top posts by number of stars
100102
String myUserId = getUid();
@@ -111,6 +113,13 @@ public void onCancelled(DatabaseError databaseError) { }
111113
// [END_EXCLUDE]
112114
});
113115
// [END basic_query]
116+
}
117+
118+
@Override
119+
public void basicQueryValueListener() {
120+
String myUserId = getUid();
121+
Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId)
122+
.orderByChild("starCount");
114123

115124
// [START basic_query_value_listener]
116125
// My top posts by number of stars
@@ -130,22 +139,37 @@ public void onCancelled(DatabaseError databaseError) {
130139
}
131140
});
132141
// [END basic_query_value_listener]
133-
134142
}
135143

136144
@Override
137-
public void onStop() {
138-
super.onStop();
139-
145+
public void cleanBasicListener() {
140146
// Clean up value listener
141147
// [START clean_basic_listen]
142148
mMessagesRef.removeEventListener(mMessagesListener);
143149
// [END clean_basic_listen]
150+
}
144151

152+
@Override
153+
public void cleanBasicQuery() {
145154
// Clean up query listener
146155
// [START clean_basic_query]
147156
mMessagesQuery.removeEventListener(mMessagesQueryListener);
148157
// [END clean_basic_query]
149158
}
159+
160+
@Override
161+
public void onStart() {
162+
super.onStart();
163+
basicListen();
164+
basicQuery();
165+
basicQueryValueListener();
166+
}
167+
168+
@Override
169+
public void onStop() {
170+
super.onStop();
171+
cleanBasicListener();
172+
cleanBasicQuery();
173+
}
150174
}
151175

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.google.firebase.referencecode.database.interfaces;
2+
3+
/**
4+
* Interface for {@link com.google.firebase.referencecode.database.QueryActivity}.
5+
*/
6+
public interface QueryActivityInterface {
7+
8+
String getUid();
9+
10+
void basicListen();
11+
12+
void basicQuery();
13+
14+
void basicQueryValueListener();
15+
16+
void cleanBasicListener();
17+
18+
void cleanBasicQuery();
19+
20+
}

0 commit comments

Comments
 (0)