現在Firestoreを使用してデータの書き込み、読み込みを行うアプリを作成しています。
Firestoreと記載しておりますが、質問の内容自体はあまり関係ないと思いますのでご了承ください。
【現在の課題】
Firestoreから値を呼び出す際に使用しているコードが以下になります。
AndroidJava
1//Firestoreから値を取得するコード 2fireStore.collection(fireStoreCollectionPath) 3 .get() 4 .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 5 @Override 6 public void onComplete(@NonNull Task<QuerySnapshot> task) { 7 if (task.isSuccessful()) { 8 for (QueryDocumentSnapshot document : task.getResult()) { 9 Log.d(TAG, "レシピ取得成功"); 10 recipes.add(document.getData()); 11 mRecipeCallback.getRecipeMap(recipes); 12 } 13 } else { 14 Log.d(TAG, "レシピ取得失敗"); 15 recipes = null; 16 mRecipeCallback.getRecipeMap(recipes); 17 } 18 } 19 });
値の正常な取得は確認できております。(doInBackGroundの処理になっています)
こちらのメソッドをActivityで呼び出す際に、別スレッドで上記の処理が実行されているため、Activity側の処理が先に実行されてしまい
何も表示されていない状況です
//Activityの処理 mRecipeCallback = new RecipeCallback() { @Override public void getRecipeMap(ArrayList<Map> recipes) { RecyclerView rv = (RecyclerView) findViewById(R.id.recyclerView); //コールバックで返却されたArrayListから、表示する情報だけを格納したリストを受け取るメソッド※1 List list = recipeListClass.createDataSet(recipeList); if (list == null) { makeToast.showToast("読み込み失敗", mContext); return; } RecyclerViewAdapter adapter = new RecyclerViewAdapter(list); LinearLayoutManager llm = new LinearLayoutManager(mContext); rv.setHasFixedSize(true); rv.setLayoutManager(llm); rv.setAdapter(adapter); } }; //上記のクラスのインスタンス recipeListAsync = new RecipeListAsync(this, mRecipeCallback); //executeを行うメソッド startAsync();
こちらがActivityのコードです。
コールバックのArrayListに値が正常に格納されてから※1のメソッドを走らせたいのですが、なにも格納されていないまま処理が走っています。
【試したこと】
もともとはただメソッドを作成していただけだが、AsyncTaskを使用。(onPostExecuteにはプログレスダイアログを削除する機能のみ実装)
Thread.sleepも試したが、読み込むまでの時間が遅くなるだけで何も変わらず。
コールバックの使用(もともとはdoInBackGroundがrecipesをreturnし、それをonPostExecuteでActivityのセッターに格納)
読みづらい文章で申し訳ありませんが、お力お貸しいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/09 03:04