코 루틴 코 틀린에서 어떻게 가치를 얻습니까?

WBLord

사용자 로그인 기능이 있습니다. 그러나 그것은 중단되었습니다. 반환 값을 얻으려고 노력하지만 할 수 없습니다. 내가 시도한 것은 다음과 같습니다.

암호

class LoginViewModel @ViewModelInject constructor(private val remoteDataSource: OrderRemoteDataSource) :
    ViewModel() {

    private fun areValidCredentials(username: String?, password: String?): Boolean {
        return username != null && password != null && username.length > 4 && password.length > 4
    }

    suspend fun login(username: String?, password: String?): Boolean {
        return suspendCoroutine { it ->
            val valid = areValidCredentials(username, password)
            if (valid) {
                // call finish so login activity won't show up after back button clicked in home fragment
                try {
                    viewModelScope.launch {
                        //TODO CHECK if error code
                        val loginResponse =
                            remoteDataSource.login(LoginRequest(username!!, password!!))
                        if (loginResponse.status == Resource.Status.SUCCESS) {
                            val jwtToken = loginResponse.data?.jwtToken
                            if (!jwtToken.isNullOrEmpty()) {
                                sessionManager.saveAuthToken(jwtToken!!)
                                //ERROR!
                                it.resume(true)
                            }

                        }
                    }
                } catch (e: Exception) {
                    Log.i("[LoginActivity]", e.localizedMessage!!)
                    it.resume(false)
                    e.printStackTrace()
                }
            } else {
                Toast.makeText(
                    LOGIN_ACTIVITY,
                    "Username and password must be at least 5 letters long",
                    Toast.LENGTH_SHORT
                ).show()
            }
            it.resume(false)
        }
    }
}

그리고 나는 그것을 부른다

@AndroidEntryPoint
class LoginFragment : Fragment() {
    private val mViewModel: LoginViewModel by viewModels()
    private lateinit var navController: NavController

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return inflater.inflate(R.layout.frg_login, container, false)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("[LoginFragment]", "onCreate fun started!")

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        navController = findNavController()
        loginButton.setOnClickListener {
            //TODO navigate to new fragmnet
            lifecycleScope.launch {
                mViewModel.login(
                    loginUsernameText.text.toString(),
                    loginPasswordText.text.toString()
                )
            }
        }
    }

그리고 나는 오류가 있습니다

ZygoteInit.main (ZygoteInit.java:947) I / chatty : uid = 10163 (ru.gkomega.navigation) 동일한 16 줄 W / mega.navigatio : 최적화 해제 할 수없는 메소드 java.lang.Class java.lang에서 최적화 해제 요청을 받았습니다. .Class.classForName (java.lang.String, boolean, java.lang.ClassLoader) I / Process : 신호를 보내는 중입니다. PID : 11863 SIG : 9 대상 VM에서 연결 끊김, 주소 : 'localhost : 58264', 전송 : 'socket'

코 루틴에 대해 잘 모르기 때문에 아마도 문제 일 것입니다.

아니 메쉬 사후

요청이 발생했는지 여부에 관계없이 코 루틴을 다시 시작합니다.

suspend fun login(username: String?, password: String?): Boolean = suspendCoroutine { cont ->
    if (areValidCredentials(username, password)) {
        try {
            viewModelScope.launch {
                val loginResponse = remoteDataSource.login(LoginRequest(username!!, password!!))
                val jwtToken = loginResponse.data?.jwtToken
                if (loginResponse.status == Resource.Status.SUCCESS && !jwtToken.isNullOrEmpty()) {
                    sessionManager.saveAuthToken(jwtToken!!)
                    cont.resume(true)
                } else cont.resume(false)  // <-- Don't forget
            }
        } catch (e: Exception) {
            Log.i("[LoginActivity]", e.localizedMessage!!)
            cont.resume(false)
            e.printStackTrace()
        }
    } else {
        Toast.makeText(
            LOGIN_ACTIVITY,
            "Username and password must be at least 5 letters long",
            Toast.LENGTH_SHORT
        ).show()
        cont.resume(false)  // <-- Put it right here.
    }
    // cont.resume(false)  // <-- Not here
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

어떻게 안드로이드에서 자바의 집행자에서 코 틀린의 코 루틴 다른입니까?

분류에서Dev

코 루틴에서 새로운 활동을 시작하려면 어떻게해야합니까? 코 틀린 안드로이드

분류에서Dev

어떻게 HashSet의에서 () 특정 요소를 얻으려면? 코 틀린

분류에서Dev

어떻게 코 틀린의 코 루틴은 네트워크 호출을 할 때 얻을 때 알고 있나요?

분류에서Dev

어떻게 자바에서 구체화 제네릭 코 틀린 메서드를 호출 할 수 있습니까?

분류에서Dev

어떻게 자바에서 코 틀린 클래스로 작성된 함수를 호출 할 수 있습니까?

분류에서Dev

코 루틴 밖에서 Flow의 가치를 얻는 방법?

분류에서Dev

코 틀린에 코 루틴 컨텍스트를 결합하는 목적은 무엇입니까?

분류에서Dev

어떻게 해제하게 IntelliJ IDEA에서 '붙여 넣기에 코 틀린에 자바를 변환'합니까?

분류에서Dev

__init__에서 코 루틴에 의존하는 변수를 어떻게 정의해야합니까?

분류에서Dev

PureScript에서 단일 생산자와 여러 코 루틴 소비자를 어떻게 결합합니까?

분류에서Dev

withContext 내에서 실행되는 코 루틴을 어떻게 취소합니까?

분류에서Dev

어떻게 코 틀린 방법으로 자바에서 람다를 전달합니까?

분류에서Dev

if 루프에서 코드를 어떻게 끊습니까?

분류에서Dev

어떻게 자바에 대한 코 틀린 정적 변수와 함수를 어떻게해야합니까?

분류에서Dev

Kotlin 코 루틴-지연, 어떻게 작동합니까?

분류에서Dev

비동기 IO 코 루틴은 어떻게 실행됩니까?

분류에서Dev

discord.py는 코드 자체에 정의 된 코 루틴을 사용하여 메시지가 전송되었음을 어떻게 감지합니까?

분류에서Dev

PHP 코드에서 루프가 어떻게 작동합니까?

분류에서Dev

Unity3d에서 O (1) 함수를 코 루틴으로 만드는 것이 가치가 있습니까?

분류에서Dev

Selenium을 사용하여이 코드에서 어떻게 가치를 얻습니까?

분류에서Dev

어떻게 코 틀린에 UTF-8 BOM을 추가?

분류에서Dev

곱셈이나 나눗셈으로 for 루프를 어떻게 반복합니까? [코 틀린]

분류에서Dev

어떻게 코 틀린에서 열거의 "오버라이드"이름 () 메소드를 액세스 할 수 있습니까?

분류에서Dev

Kotlin에서 코 루틴을 가져올 수 없습니다.

분류에서Dev

안드로이드, 루핑은 어떻게 작동합니까? (코 틀린)

분류에서Dev

코 루틴을 호출하고 asyncio.Protocol.data_received ()에서 미래를 얻습니까?

분류에서Dev

어떻게 내 ThreadPoolExecutor에 근무 디스패처 사용자 정의 코 틀린의 코 루틴을 만드는 방법?

분류에서Dev

Unity3d에서 코 루틴을 사용하여 카운터를 업데이트하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    어떻게 안드로이드에서 자바의 집행자에서 코 틀린의 코 루틴 다른입니까?

  2. 2

    코 루틴에서 새로운 활동을 시작하려면 어떻게해야합니까? 코 틀린 안드로이드

  3. 3

    어떻게 HashSet의에서 () 특정 요소를 얻으려면? 코 틀린

  4. 4

    어떻게 코 틀린의 코 루틴은 네트워크 호출을 할 때 얻을 때 알고 있나요?

  5. 5

    어떻게 자바에서 구체화 제네릭 코 틀린 메서드를 호출 할 수 있습니까?

  6. 6

    어떻게 자바에서 코 틀린 클래스로 작성된 함수를 호출 할 수 있습니까?

  7. 7

    코 루틴 밖에서 Flow의 가치를 얻는 방법?

  8. 8

    코 틀린에 코 루틴 컨텍스트를 결합하는 목적은 무엇입니까?

  9. 9

    어떻게 해제하게 IntelliJ IDEA에서 '붙여 넣기에 코 틀린에 자바를 변환'합니까?

  10. 10

    __init__에서 코 루틴에 의존하는 변수를 어떻게 정의해야합니까?

  11. 11

    PureScript에서 단일 생산자와 여러 코 루틴 소비자를 어떻게 결합합니까?

  12. 12

    withContext 내에서 실행되는 코 루틴을 어떻게 취소합니까?

  13. 13

    어떻게 코 틀린 방법으로 자바에서 람다를 전달합니까?

  14. 14

    if 루프에서 코드를 어떻게 끊습니까?

  15. 15

    어떻게 자바에 대한 코 틀린 정적 변수와 함수를 어떻게해야합니까?

  16. 16

    Kotlin 코 루틴-지연, 어떻게 작동합니까?

  17. 17

    비동기 IO 코 루틴은 어떻게 실행됩니까?

  18. 18

    discord.py는 코드 자체에 정의 된 코 루틴을 사용하여 메시지가 전송되었음을 어떻게 감지합니까?

  19. 19

    PHP 코드에서 루프가 어떻게 작동합니까?

  20. 20

    Unity3d에서 O (1) 함수를 코 루틴으로 만드는 것이 가치가 있습니까?

  21. 21

    Selenium을 사용하여이 코드에서 어떻게 가치를 얻습니까?

  22. 22

    어떻게 코 틀린에 UTF-8 BOM을 추가?

  23. 23

    곱셈이나 나눗셈으로 for 루프를 어떻게 반복합니까? [코 틀린]

  24. 24

    어떻게 코 틀린에서 열거의 "오버라이드"이름 () 메소드를 액세스 할 수 있습니까?

  25. 25

    Kotlin에서 코 루틴을 가져올 수 없습니다.

  26. 26

    안드로이드, 루핑은 어떻게 작동합니까? (코 틀린)

  27. 27

    코 루틴을 호출하고 asyncio.Protocol.data_received ()에서 미래를 얻습니까?

  28. 28

    어떻게 내 ThreadPoolExecutor에 근무 디스패처 사용자 정의 코 틀린의 코 루틴을 만드는 방법?

  29. 29

    Unity3d에서 코 루틴을 사용하여 카운터를 업데이트하려면 어떻게해야합니까?

뜨겁다태그

보관