본문 바로가기
안드로이드/Coroutine

안드로이드 비동기 처리 후 메인 스레드 동작

by 김어찐 2022. 7. 7.
728x90

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        apiInit1()
        Log.d("crt","foodShopInfoList.size : ${foodShopInfoList.size}")
        Log.d("crt","drinkShopInfoList.size : ${drinkShopInfoList.size}")
        Log.d("crt","nowFoodId : ${nowFoodId}")
        Log.d("crt","nowDrinkId: ${nowDrinkId}")
        apiInit2()
        Log.d("crt","foodShopDetailInfoList.size : ${foodShopDetailInfoList.size}")
        Log.d("crt","drinkShopInfoList.size : ${drinkShopDetailInfoList.size}")
        
        }
        
   fun apiInit1() {
        val job1 = GlobalScope.launch(Dispatchers.Default) {
            getDrinkSnackList().await()
        }

        val job2 = GlobalScope.launch(Dispatchers.Default) {
            getFoodSnackList().await()
        }

        val job3 = GlobalScope.launch(Dispatchers.Default){
            getNowSnackType().await()
        }



        runBlocking {
            job1.join()
            job2.join()
            job3.join()
        }
    }
    
    fun getFoodSnackList() :Deferred<Unit> {
        foodShopInfoList.clear()

        val result = CoroutineScope(Dispatchers.Default).async {
            val client = OkHttpClient()

            val foodUrl = "${ServerInfo.SERVER_URL}/api/shop/FOOD"


            val foodRequest = Request.Builder().url(foodUrl).build()
            val foodResponse = client.newCall(foodRequest).execute()
            if (foodResponse.isSuccessful) {
                val resultText = foodResponse.body?.string()!!.trim()
                Log.d("test", resultText.toString())
                val root = JSONObject(resultText)

                val data = root.getJSONArray("data")
                for (i in 0 until data.length()) {
                    val shopData = data.getJSONObject(i)
                    val id = shopData.getInt("id")
                    val shopName = shopData.getString("shopName")
                    val menuURI = shopData.getString("menuURI")

                    val shopInfo = ShopInfo(id, shopName, menuURI)

                    foodShopInfoList.add(shopInfo)
                }
            }
            return@async
        }
        return result;
    }
}
728x90