>

와이즈 비즈가있다  POST 요청을 서버에 호출하는 함수입니다. 서버에서받은 정보를 표시하기 위해 활동의 일부 텍스트를 구성하고 싶습니다.

suspend

suspend fun retrieveInfo():String 안에서 전화를 했어요 onCreate  하지만 런타임에 충돌합니다.

onResume

runBlocking { 
    retrieveInfo()
}

이 일시 중단 호출을 어디에 넣을 것이라고 생각합니까 (활동 수명주기의 어느 부분에서)? java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.augmentedimage/com.google.AugmentedImageActivity}: android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3229) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 이외의 다른 것을 사용해야합니까 ?

runBlocking

  • 답변 # 1

    기본적으로 runBlocking  서 스펜 딩 코드 block 를 실행합니다.  스레드 runBlocking 에서  에 전화했다.

    따라서 runBlocking 를 불렀다면   Activity 에서  콜백이 중단되면 메인 스레드에서 실행되어네트워크에 액세스 할 수 없습니다 (서버 조회)

    .

    그 통화를 위해 코 루틴 블록에서 디스패처를 전환해야합니다. 코드의 가장 간단한 수정은 실행을 Dispatchers.IO 로 옮기는 것입니다. .

    runBlocking {
        withContext(Dispatchers.IO) {
            retrieveInfo()
        }
    }
    
    
    <시간>

    그 말은 두 가지를 제안합니다 (질문과 직접 ​​관련이 없음) :

    <올>

    와이즈 비즈 읽기  (이 부분과 다음 부분)

    2. Coroutines on Android 를 사용하지 마십시오  귀하의 경우에는 올바른 runBlocking 를 정의하십시오.   job 를 사용하십시오.

    job.launch{}

  • 이전 Cloud Functions를 사용하여 Firestore 모음의 모든 문서에 쓰는 방법은 무엇입니까?
  • 다음 xcode - 소스 코드를 공유하지 않고도 iOS 프레임 워크를 공유 할 수 있습니까?