Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Using Cloud Firestore in Android
Search
Yuan Ito
February 10, 2018
Technology
100
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Using Cloud Firestore in Android
Yuan Ito
February 10, 2018
Other Decks in Technology
See All in Technology
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
200
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
120
Local CI × GitHub Actions
gogutan
2
190
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
WasmをRustにする
sansantech
PRO
0
250
go-sqletch
moznion
0
140
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
460
大型犬好きによるPugの紹介
yamanoku
1
160
hackers_champloo_2026_tidb
makocchi
0
160
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
The Language of Interfaces
destraynor
162
27k
What's in a price? How to price your products and services
michaelherold
247
13k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
4 Signs Your Business is Dying
shpigford
187
23k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Transcript
6TJOH$MPVE'JSFTUPSF JO"OESPJE 'JSFCBTF+BQBO6TFS(SPVQNFFUVQ
w !JUPH w &OHJOFFS "OESPJE*P5 FNCFEEFE w -PWF#BB4*NJTTFETCFGPSFDMPVEpSFTUPSF w
3VOOJOHUIFDPNQBOZOBNFEQJHNBM --$
*OUIJT-JHIUOJOH5BML w UBMLBCPVU w 5IFUJQTUPVTFDMPVEpSFTUPSFJO"OESPJE w /05UBMLBCPVU w 'JSFCBTF$MPVE'JSFTPUSFCBTJD w
"OESPJECBTJD
$PNNPOJTTVFJO"OESPJE w 6* "DUJWJUZ 'SBHNFOU IBTBMJGFDZDMF w PO$SFBUF PO3FTVNF PO1BVTF
PO%FTUSPZFUDʜ w .BJOUISFBEIBOEMF6* w #MPDLJOHPQFSBUJPOMJLFOFUXPSLSFRVFTUJTOPUBMMPXFEUPSVOPO 6*UISFBE w NBZDBVTF"/3 w 5ISFBEEPFTO`UDBSFBCPVU6*MJGFDZDMF w "DUJWJUZNBZMFBL
-JGFDZDMFBXBSF "TZODISPOPVTEBUB GFUDIJOHVTJOH5BTL
8IBUJT5BTLT"1* w BO"1*UIBUSFQSFTFOUTBTZODISPOPVTNFUIPEDBMMT w $BMMFE1SPNJTFJOPUIFSMBOHVBHF
4JNQMF'JSFTUPSFFYBNQMF db.collection("users") .add(user) .addOnCompleteListener((task) -> { if (task.isSuccessful()) { Log.d(TAG,
"DocumentSnapshot added with ID: " + task.getResult().getId()); } else { Log.w(TAG, "Error adding document", task.getException()); } }); w %BUBPQFSBUJPOMJLFBEE TFU HFU VQEBUF EFMFUF RVFSZ SFUVSO5BTL Task<DocumentReference> add(Object pojo) Task<DocumentReference> add(Map<String, Object> data)
8IFSFJTBQJUGBMM w 5IFMJTUFOFSIBTBSFGFSFODFUPUIFBDUJWJUZ w 5IFMJTUFOFSNBZMJWFMPOHFSUIBOUIFBDUJWJUZ w $BVTJOH"DUJWJUZ-FBL protected void onCreate(Bundle
savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv =findViewById(R.id.documentId); db.collection(“users") .add(user) .addOnSu .addOnSuccessListener((d) -> { Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show(); }); }
w 5IFMJTUFOFSTIBWFUZQFTPGQBSBNFUFST Task addOnCompleteListener(OnCompleteListener listener) Task addOnCompleteListener( Activity activity, OnSuccessListener
listener) Task addOnCompleteListener( Executor executor, OnSuccessListener listener) 5BLJOHDBSFPGUIFMJGFDZDMF
w MJTUFOFSXJMMCFBVUPNBUJDBMMZSFNPWFEGSPNUIFUBTL XIFOUIF"DUJWJUZHPFTUISPVHIJUTPO4UPQ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
TextView tv =findViewById(R.id.documentId); db.collection(“users") .add(user) .addOnSu .addOnSuccessListener(this, (d) -> { tv.setText(d.getId()); }); } MJGFDZDMFBXBSFMJTUFOFS
#BEOFXT w 5IFEPDVNFOUTBZTl5BTL8"4EFQSFDBUFEz w 5IFSFJTOPMJTUFOFSUIBUIBT"DUJWJUZBTBpSTU QBSBNFUFS ͜ͷεϥΠυͷ༰ؒҧ͍Ͱͨ͠ͷͰ আ͠·͢
$VTUPN0CKFDU XJUIEPDVNFOUJE
UP0CKFDU w :PVDBONBQUIFEPDVNFOUTOBQTIPUUPUIFPCKFDU public class Chat { private String mName;
private String mMessage; private String mUid; // user id private Date mTimestamp; Public Chat() {} // default constructor is necessary ... } Chat chat = documentSnapshot.toObject(Chat.class);
w 5IFEPDVNFOUJEJTOPUNBQQFE w 8IFOUPVQEBUFEFMFUFUIFJUFN ZPVOFFEUIF EPDVNFOUJE query.get().addOnSuccessListener(documentSnapshots -> { for
(DocumentSnapshot d :documentSnapshots) { Chat chat = d.toObject(Chat.class); String objectId = d.getId(); } }
w "EEEPDVNFOUJEXJUI!&YDMVEFBOOPUBUJPO public class Chat extends AbstractChat { … @Exclude
private String documentId; @Exclude public String getDocumentId() { return documentId; } @Exclude public void setDocumentId(String documentId) { this.documentId = documentId; } } -FUUIFNPEFMIBWFUIF EPDVNFOUJE
w 4FUUIFEPDVNFOUJEXIFOZPVSFUSJFWFUIFEBUB query.get().addOnSuccessListener(documentSnapshots -> { for (DocumentSnapshot d :documentSnapshots) {
Chat chat = d.toObject(Chat.class); chat.setDocumentId(snapshot.getId()); ... } }
6TJOH'JSFCBTF6*
'JSFCBTF6* w BOPQFOTPVSDFMJCSBSZUIBUBMMPXTZPVUPRVJDLMZ DPOOFDUDPNNPO6*FMFNFOUTUP'JSFCBTF"1*T w "OESPJEIUUQTHJUIVCDPNpSFCBTF'JSFCBTF6* "OESPJE w J04IUUQTHJUIVCDPNpSFCBTF'JSFCBTF6*J04 w
XFCIUUQTHJUIVCDPNpSFCBTFpSFCBTFVJXFC
'JSFCBTF6*"OESPJE w "VUI6* w 3FDZDMFS7JFXBEBQUFSGPS $MPVE'JSFTUPSFSFBMUJNF EBUBCBTF w *NBHFVQMPBEBOEEPXOMPBE VTJOH$MPVE4UPSBHF
'JSFCBTF3FDZDMFS"EBQUFS w 4VCDMBTTPG3FDZDMFS7JFX"EBQUFS w -JTUFOUPUIFpSFTUPSF w -JGFDZDMFBXBSF public abstract class
FirestoreRecyclerAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> implements ChangeEventListener, LifecycleObserver
'JSFTUPSF3FDZDMFS0QUJPOT w 4FUUIFRVFSZBOEUIFMJGFDZDMFPXOFS FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>() .setQuery(sChatQuery, Chat.class)
.setLifecycleOwner(this) .build(); new FirestoreRecyclerAdapter<Chat, ChatHolder>(options) { @Override protected void onBindViewHolder(@NonNull ChatHolder holder, int position, @NonNull Chat model) { holder.bind(model); } … }
8IBU`TNJTTJOHʁ w +VTUTIPXJOHJTPL CVUZPVNBZXBOUUPNPEJGZUIF JUFN
'JSFTUPSF3FDZDMFS0QUJPOT TFU2VFSZ w 5IFSFBSFUZQFTPGTFU2VFSZ w :PVDBOTFU4OBQTIPU1BSTFS public Builder<T> setQuery(@NonNull
Query query, @NonNull Class<T> modelClass) public Builder<T> setQuery(@NonNull Query query, @NonNull SnapshotParser<T> parser) public Builder<T> setQuery(@NonNull Query query, @NonNull QueryListenOptions options, @NonNull SnapshotParser<T> parser) public Builder<T> setQuery(@NonNull Query query, @NonNull QueryListenOptions options, @NonNull Class<T> modelClass)
w 4FUUIFEPDVNFOUJEJOUIFQBSTFS FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>() .setQuery(query, snapshot ->
{ Chat chat = snapshot.toObject(Chat.class); chat.setDocumentId(snapshot.getId()); return chat; }) .setLifecycleOwner(this) .build();
.BZCFOFYU w 6TJOHXJUI"OESPJE"SDIJUFDUVSF$PNQPOFOUT w "OESPJE"SDIJUFDUVSF$PNQPOFOUTษڧձ w IUUQTHEHUPLZPDPOOQBTTDPNFWFOU
None