Job*_*b M 11 android firebase firebase-realtime-database google-cloud-firestore
我正想通过这个博客由道格·史蒂文森(火力地堡开发者布)有关如何使用该博客会谈火力实时数据库与Android架构的组件.
这是一个类FirebaseQueryLiveData,它构成了一个可重用的类来管理所有Firebase查询以及实现LiveData.这虽然完全适用于Firebase RealTime数据库,但我似乎无法更改或更改它以支持云Firestore数据库.
这是代码
public class FirebaseQueryLiveData extends LiveData<DataSnapshot> {
private static final String LOG_TAG = "FirebaseQueryLiveData";
private final Query query;
private final MyValueEventListener listener = new MyValueEventListener();
public FirebaseQueryLiveData(Query query) {
this.query = query;
}
public FirebaseQueryLiveData(DatabaseReference ref) {
this.query = ref;
}
@Override
protected void onActive() {
Log.d(LOG_TAG, "onActive");
query.addValueEventListener(listener);
}
@Override
protected void onInactive() {
Log.d(LOG_TAG, "onInactive");
query.removeEventListener(listener);
}
private class MyValueEventListener implements ValueEventListener {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
setValue(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(LOG_TAG, "Can't listen to query " + query, databaseError.toException());
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*gun 11
这是@JobM帖子的查询版本.谢谢@JobM!为清晰起见,我建议将@ JobM的版本重命名为FirebaseDocumentLiveData.
import android.arch.lifecycle.LiveData;
import android.os.Handler;
import android.util.Log;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.ListenerRegistration;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;
import javax.annotation.Nullable;
public class FirebaseQueryLiveData extends LiveData<QuerySnapshot> {
public static final String TAG = "FbaseQueryLiveData";
private Query query;
private final MyValueEventListener listener = new MyValueEventListener();
private ListenerRegistration listenerRegistration;
private boolean listenerRemovePending = false;
private final Handler handler = new Handler();
public FirebaseQueryLiveData(Query query) {
this.query = query;
}
private final Runnable removeListener = new Runnable() {
@Override
public void run() {
listenerRegistration.remove();
listenerRemovePending = false;
}
};
@Override
protected void onActive() {
super.onActive();
Log.d(TAG, "onActive");
if (listenerRemovePending) {
handler.removeCallbacks(removeListener);
}
else {
listenerRegistration = query.addSnapshotListener(listener);
}
listenerRemovePending = false;
}
@Override
protected void onInactive() {
super.onInactive();
Log.d(TAG, "onInactive: ");
// Listener removal is schedule on a two second delay
handler.postDelayed(removeListener, 2000);
listenerRemovePending = true;
}
private class MyValueEventListener implements EventListener<QuerySnapshot> {
@Override
public void onEvent(@Nullable QuerySnapshot querySnapshot, @Nullable FirebaseFirestoreException e) {
if (e != null){
Log.e(TAG, "Can't listen to query snapshots: " + querySnapshot + ":::" + e.getMessage());
return;
}
setValue(querySnapshot);
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于科特林的恋人:)
import android.os.Handler
import androidx.annotation.Nullable
import androidx.lifecycle.LiveData
import com.google.firebase.firestore.*
import timber.log.Timber
class FirebaseQueryLiveData(private val query: Query) : LiveData<QuerySnapshot>() {
private val listener = MyValueEventListener()
private var listenerRegistration: ListenerRegistration? = null
private var listenerRemovePending = false
private val handler = Handler()
private val removeListener = Runnable {
listenerRegistration!!.remove()
listenerRemovePending = false
}
override fun onActive() {
super.onActive()
Timber.d( "onActive")
if (listenerRemovePending) {
handler.removeCallbacks(removeListener)
} else {
listenerRegistration = query.addSnapshotListener(listener)
}
listenerRemovePending = false
}
override fun onInactive() {
super.onInactive()
Timber.d("onInactive: ")
// Listener removal is schedule on a two second delay
handler.postDelayed(removeListener, 2000)
listenerRemovePending = true
}
private inner class MyValueEventListener : EventListener<QuerySnapshot> {
override fun onEvent(@Nullable querySnapshot: QuerySnapshot?, @Nullable e: FirebaseFirestoreException?) {
if (e != null) {
Timber.e(e, "Can't listen to query snapshots: %s", querySnapshot)
return
}
value = querySnapshot
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3009 次 |
| 最近记录: |