관리 메뉴

나만을 위한 블로그

[Android] 웹뷰 브릿지 통신 시 Java exception was raised during method invocation 에러 해결법 본문

Android

[Android] 웹뷰 브릿지 통신 시 Java exception was raised during method invocation 에러 해결법

참깨빵위에참깨빵 2023. 8. 2. 23:41
728x90
반응형

브릿지로 웹뷰와 통신할 때, 웹뷰에서 앱의 카메라 기능을 다루는 함수를 호출하려고 하면 제목의 에러가 발생했다.

저 문장을 번역하면 메서드 호출 중에 자바 예외가 발생했다는 뜻이다.

이 에러는 자바스크립트가 호출하는 안드로이드의 함수가 메인 쓰레드에서 작동하도록 작성한 경우에 발생할 수 있다. 꼭 모든 evaluateJavascript()가 별도의 쓰레드 또는 코루틴에서 실행돼야 하는 건 아니고, 안드로이드 앱 내의 함수가 실행하는 작업이 UI가 느려질 수 있거나 시간이 좀 걸리는 작업이라면 별도의 쓰레드 or 코루틴에서 호출하면 된다.

 

간단한 방법으로는 runOnUiThread를 쓸 수 있다. 아래는 예시 코드다.

 

private fun foo() = runOnUiThread {
    clazz.foo(
        myViewModel::getSomethingsCount,
        this::callHeavyFunction
        this::failedHandleEvent
    )
}

private fun callHeavyFunction() {
    시간이_오래_걸릴_수_있는_함수()
}

private fun failedHandleEvent() {
    callJavascript("foo()")
}

 

callJavascript()는 evaluateJavascript()를 래핑한 함수다. 참고로 evaluateJavascript()의 2번째 매개변수로 콜백을 넣을 수 있는데, 여기서 자바스크립트 함수에서 반환하는 값을 다루는 로직을 작성할 수 있다. 그러나 어지간해선 보통 2번째 매개변수는 null로 설정하고, 나도 그렇기 때문에 일일이 null 쓰기 귀찮아서 callJavascript() 같은 이름의 evaluateJavascript()를 래핑한 함수를 만들어 사용하곤 한다.

foo()에서 중괄호 블록 대신 등호를 사용해, 어떤 클래스의 참조객체(clazz)를 통해 그 클래스 안의 함수를 호출하는 코드를 runOnUiThread로 감싼 것 말고는 별 특별한 게 없다. 그냥 저렇게 하는 것만으로 포스팅 제목의 에러가 발생하지 않을 수 있다.

 

만약 웹뷰와 브릿지 통신으로 이것저것 작업을 처리하는 중에 저 에러가 발생한다면 간단하게 runOnUiThread를 사용하면 된다.

 

참고한 사이트)

 

https://triest.tistory.com/8

 

java exception was raised during method invocation 오류

웹뷰와 자바스크립트 간 통신을 할 때 다음과 같은 오류가 발생할 때가 있다. java exception was raised during method invocation 이는 js에서 안드로이드 메서드를 호출할 때 발생하는데, 스레드가 필요한 작

triest.tistory.com

 

https://stackoverflow.com/questions/70195713/error-java-exception-was-raised-during-method-invocation

 

Error: Java exception was raised during method invocation

I got an error when js invoke Android's native method on android 5,6,7 Error: Java exception was raised during method invocation From javascript I am calling native android's method like this: And...

stackoverflow.com

 

반응형
Comments