마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

웹뷰에서 인쇄 버튼을 두번째 눌렀을 때의 오류입니다.

0 추천
안녕하세요.

Android studio: 4.1.2

웹페이지의 "Print" 버튼을 누르면 아래와 같이 MainActivity.java 의 call_print_mainView 혹은 call_print_dialog 함수를 호출하여 프린터 다이얼로그를 띄웁니다.

페이지가 로딩 된 후 처음 이 버튼을 눌러 인쇄를 하거나 취소를 한 후,

다시 이 버튼을 눌렀을 때... 문제가 생깁니다.

앱이 다운되거나... 아무런 반응이 없다는 것입니다.

아무리 구글링을 해 봐도... 해결을 할 수가 없네요 ㅡ.ㅡ

소스는 아래와 같습니다.

##### 웹페이지의 javascript

function exec_print_at_app() {

window.print();

try {

window.MyAndroid.call_print_mainView();

} catch(e) {

try {

window.MyAndroidForDialog.call_print_dialog();

} catch(e) { }

}

}

$(document).ready(function(){

});

$(document).on("click", ".btn_print", function() { exec_print_at_app(); });

 

##### MainActivity.java

이 게시판에 8000 자 이상 기재를 못해서 아래 주소에 textarea 태그에 넣었습니다.

http://androidprint.igonna.net

##### 아래는 로그입니다.

#### 맨 처음 "Print" 를 클릭 했을때의 로그.

E/MyWebView: start call_print_mainView
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: true
    [InputMethodManagerWrapper.java:68] hideSoftInputFromWindow
W/art: Attempt to remove non-JNI local reference, dumping thread

#### 그런 후 "back" 버튼을 눌렀습니다.

#### 다시 "Print" 를 눌렀을 때의 로그입니다.

E/MyWebView: start call_print_mainView
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.View.post(java.lang.Runnable)' on a null object reference
        at net.igonna.androidprint.MainActivity$MyJavaScriptInterface.call_print_mainView(MainActivity.java:169)
W/System.err:     at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
        at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.os.HandlerThread.run(HandlerThread.java:61)
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: true
    [InputMethodManagerWrapper.java:68] hideSoftInputFromWindow
W/art: Attempt to remove non-JNI local reference, dumping thread
청소부 (140 포인트) 님이 2021년 4월 19일 질문
E/MyWebView: start call_print_mainView
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.View.post(java.lang.Runnable)' on a null object reference

로그만 보면  MainActivity에 있는 해당 함수를 사용하는 오브젝이 null이 된 것 같아 보여요. 해당 함수를 사용하는 부분들을 잘 체크해 보세요.
우선 시간내주셔서 감사합니다.

그걸 알수가 없으니... 구글링도하고... 여기에도 도움을 구하고 있는 거여요... ㅡ.ㅡ
풀 소스도... 올려 놓았구요...

1개의 답변

0 추천

일단은 에러가 다음 라인에서 난 것처럼 보이네요.

webView.post(new Runnable() {
                @Override
                public void run() {
                    createWebPrintJob(webView);
                    webView = null;
                }
            });

webView.post할 때 웹뷰가 null 이 된 상태여서 나는 에러로 보입니다. 한번 post하고 null을 세팅하는 부분이 좀 이상하구요.

그리고 webView가 널이 된 건 백버튼을 누르셨다가 다시 돌아왔다고 했는데, onBackPressed 콜백에서  super 를 호출하지 않으시는 걸로 봐서 뭔가 backPressCloseHandler와 관련될 것으로 추측이 됩니다. BackPresseCloseHandler의 내용은 알 수가 없지만요. 해당 부분에서 시스템 콜백을 어떻게 오버라이드 하시는지 한번 잘 체크해 보세요.

public void onBackPressed() {   // int keyCode, KeyEvent event
        backPressCloseHandler.onBackPressed(webView);
    }

 

 

 

 

spark (227,510 포인트) 님이 2021년 4월 20일 답변
구글링해서 하다보니... 그 의미도 모르고 막 했네요 ㅡ.ㅡ

webView = null; <-- 이것을 지우니 너무 너무 잘 됩니다.

정말 감사합니다.
프린팅 완벽하게 되네요...
...