본문 바로가기
Android/Dev

webview의 loadData 사용 시 화면에 아무것도 나타나지 않을때

by featherwing 2020. 7. 20.
반응형

webview를 사용한 Open Source Licence 화면

위와 같이 Open Source Licence 화면을 만들때 webview와 webview.loadData를 사용하곤 합니다.

 

보통 String 리소스에 해당 부분의 내용을 작성해 둔 후 아래와 같이 사용하면 화면의 webview에 간단하게 내용을 보여줄 수 있습니다.

 

public void initWebview() {
  setContentView(R.layout.activity_setting_web);
        WebView webview = findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setVerticalScrollBarEnabled(true);

        String HTML= getString(R.string.OpenSource);
        webview.loadData(HTML, "text/html; charset=utf-8", "utf-8");
        
        }

 

여러 앱들에 위와 같은 방법을 사용하여 Open Source Licence를 보여주고 있는데요.

 

개발중인 앱에서 언제인가부터 해당 부분이 보이지 않는 현상이 발생하였습니다.

 

아무것도 나타나지 않는 webview

위와 같이 아무것도 나타나지 않거나, 소스의 일부분만 나타났습니다.

 

 

안드로이드 7.0을 사용하는 AVD 기기에서는 나타나지 않았고

 

안드로이드 8.0, 10을 사용하는 기기에서는 모두 보이지 않았는데 이전에는 잘 보이던것을 확인 하였기 때문에

 

원인은 최근에 apiTaget을 29로 변경한 것이 원인이거나, 안드로이드 내부 webview의 업데이트가 발생하였기 때문으로 생각됩니다.

 

해결방법은 다음과 같습니다.

 

loadData 대신 loadDataWithBaseURL을 사용해 주면 이전과 같이 잘 보이는것을 확인했습니다.

 

        String HTML= getString(R.string.OpenSource);
        //webview.loadData(HTML, "text/html; charset=utf-8", "utf-8");
        webview.loadDataWithBaseURL(null, HTML, "text/html; charset=utf-8", "utf-8",null);

 

원인은 정확하게 파악하지는 못했습니다.

 

loadData와 loadDataWithBaseURL의 차이도, 해당 Data가 이미지 링크와 같은 절대경로를 가지고 있는 경우에 깨지는 것을 방지하기 위해서 loadDataWithBaseURL을 사용한다고 알고 있었고,  위의 코드에도 차이가 나는 부분은 null로 입력해 주었는데도 loadData를 loadDataWithBaseURL로 변경해 주는 것만으로 해결되었습니다.

 

코드를 잘못 짜올렸다거나, 변경한 부분이 잘못되어서 발생하는 문제는 원인을 찾기도 쉽고 그 뒤에는 해결방안을 찾기도, 또 이해하기도 쉬운데, 이렇게 잘 되 던 부분이 갑자기 발생하고 원인을 파악할 수 없는 부분이 생길 때는 가끔 오묘한 기분이 들곤 합니다.

 

반응형

댓글