[Android] WebView reload 에러, 웹뷰 새로고침 문제해결

상황

- WebView에서 스와이프 새로고침(아래로 당겨서 새로고침) 구현 중 에러 발생

 

에러 화면 1

로그 기록을 확인해보니 NullPointerException 에러가 발생했다고 한다.

 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

		// 기타 코드 생략
        mWebView.loadUrl("https://www.naver.com");


        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                webView.reload();
                refreshLayout.setRefreshing(false);
            }
        });
    }

원래는 이런식으로.. onCreate 안에서 loadurl로 웹 사이트를 불러오고, onRefresh() 안에서 reload();를 실행시켰는데, 값이 없다며 계속 에러가 났다. 그래서 따로 주소를 담는 변수를 선언해서 직접 relaod 안에 넣어보기도 했는데 역시나 에러~(어짜피 이럴 경우 매번 그 페이지를 불러와서 사용하지는 못할 방법이지만)

 

그런데 간단한 한줄로 해결할 수 있었다.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

		// 기타 코드 생략
        mWebView.loadUrl("https://www.naver.com");


        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                //webView.reload();
                mWebView.loadUrl(mWebView.getUrl());
                refreshLayout.setRefreshing(false);
            }
        });
    }

위 처럼 relaod 말고, 다시 loadUrl로 원래 가지고 있던 주소를 불러오는 것이다. 문제해결!

 

 

그 외 확인 해볼것

- 자바스크립트를 불러오는 중 에러가 난 경우도 있었다.

webSettings.setJavaScriptEnabled(true);webSettings.setDomStorageEnabled(true); 추가