質問編集履歴

1

メッセージ修正

2020/02/13 15:04

投稿

m_s
m_s

スコア51

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  原因として、推測されるのは以下のように画像の取得で用いられるFirebaseStorageとそれ以外の取得に用いられるRealtimedatabaseそれぞれが非同期処理で動いているためかと思われます。
8
8
 
9
- 例えば、realtimeDatabase側の「for(DataSnapshot ds・・・」の4ループ目が画像1だったとして、その画像データの取得(FireStorage側)が完了した時、Realtimedatabaseが7ループ目まで進んでいたとしたら、本来4ループ目のmessageDataBeanに画像データを入れるはずが
9
+ 例えば、realtimeDatabase側の「for(DataSnapshot ds・・・」の4ループ目が画像1だったとして、その画像データの取得(FireStorage側)が完了した時、Realtimedatabaseが7ループ目まで進んでいたとしたら、本来4ループ目のmessageDataBeanに画像データを入れるはずが7ループ目のmessageDataBeanを更新してしまうということです。
10
+
11
+ これを防ぐには例えば4ループ目で取得し始めた画像を取得完了後に、4ループ目のList<messageDataBean>の要素(messageDataBean)の画像フィールドにセット、8ループ目で取得しようとした画像を8ループ目のListの要素にセットというように処理を実装する必要があるのですが、その方法を教えていただけないでしょうか。
10
12
 
11
13
 
12
14
 
@@ -109,9 +111,3 @@
109
111
  });
110
112
 
111
113
  ```
112
-
113
-
114
-
115
- 画像処理とrealtimedbの処理が連なっておらず非同期の中で画面更新をかけているので、表示内容の整合性が取れていないことにあると考えられる。
116
-
117
- ただ、非同期でないと画像が全て取得できるまでフリーズするので、画像が取得できたらその都度整合性を保ったまま(順番を保ったまま)マージして表示する必要がある。