3 回答
![?](http://img1.sycdn.imooc.com/545863b500014e4602200220-100-100.jpg)
TA贡献1995条经验 获得超2个赞
loadModelWithDataFromFirebase()
loadModelWithDataFromFirebase()
public void loadModelWithDataFromFirebase(){ Firebase db = new Firebase(//url); Firebase bookmarksRef = fb.child(//access correct child); Log.v("Async101", "Start loading bookmarks"); final ArrayList<Bookmark> loadedBookmarks = new ArrayList<Bookmark>(); bookmarksRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Log.v("Async101", "Done loading bookmarks"); //getting all properties from firebase... Bookmark bookmark = new Bookmark(//properties here); loadedBookmarks.add(bookmark); } @Override public void onCancelled(FirebaseError firebaseError) { } }); Log.v("Async101", "Returning loaded bookmarks"); setBookmarks(loadedBookmarks);}
Start loading bookmarksReturning loaded bookmarksDone loading bookmarks
压制异步错误(通常伴随着这样的短语:“这是个错误,这些人不知道自己在做什么”) 拥抱异步野兽(通常伴随着几个小时的诅咒,但经过一段时间的和平和行为良好的应用程序)
采取蓝色药丸-使异步调用同步运行。
public void loadModelWithDataFromFirebase() throws InterruptedException { Firebase db = new Firebase(//url); Firebase bookmarksRef = fb.child(//access correct child); Semaphore semaphore = new Semaphore(0); final ArrayList<Bookmark> loadedBookmarks = new ArrayList<Bookmark>(); bookmarksRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Bookmark bookmark = new Bookmark(//properties here); loadedBookmarks.add(bookmark); semaphore.release(); } @Override public void onCancelled(FirebaseError firebaseError) { throw firebaseError.toException(); } }); semaphore.acquire(); setBookmarks(loadedBookmarks);}
更新(20160303)
采用红色药丸-处理Firebase中数据同步的异步性质
public void synchronizeBookmarks(){ Firebase db = new Firebase(//url); Firebase bookmarksRef = fb.child(//access correct child); final ArrayList<Bookmark> loadedBookmarks = new ArrayList<Bookmark>(); bookmarksRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Bookmark bookmark = new Bookmark(//properties here); loadedBookmarks.add(bookmark); setBookmarks(loadedBookmarks); loadSampleData(); } @Override public void onCancelled(FirebaseError firebaseError) { throw firebaseError.toException(); } });}
onDataChange
onDataChange
![?](http://img1.sycdn.imooc.com/545845e900013e3e02200220-100-100.jpg)
TA贡献1936条经验 获得超6个赞
private static BookSingleton model = new BookSingleton();private BookSingleton() {}public static BookSingleton getModel() { return model == null ? new BookSingleton() : model;}
添加回答
举报