편집 기록

편집 기록
  • 프로필 편집요청빌런님의 편집
    날짜2020.01.16

    webView 하얀 화면


    public class MainActivity extends AppCompatActivity {
    
        private WebView webView;
        private TextView txt_address;
        private Handler handler;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            txt_address = findViewById(R.id.txt_address);
    
            // WebView 초기화
            init_webView();
    
            // 핸들러를 통한 JavaScript 이벤트 반응
            handler = new Handler();
        }
    
        public void init_webView() {
    
            // WebView 설정
            webView = (WebView) findViewById(R.id.webView_address);
    
            webView.setWebViewClient(new WebViewClient() {
    
                @Override
                public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                    handler.proceed();
                }
            });
    
            webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    
            webView.setWebViewClient(new SslWebViewConnect());
            // JavaScript 허용
            webView.getSettings().setJavaScriptEnabled(true);
    
            // JavaScript의 window.open 허용
            webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    
            // JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌
            webView.addJavascriptInterface(new AndroidBridge(), "TestApp");
    
            // web client 를 chrome 으로 설정
            webView.setWebChromeClient(new WebChromeClient());
    
            webView.getSettings().setDomStorageEnabled(true);
    
        }
    
        // webview url load. php 파일 주소
        // webView.loadUrl("http://naver.com");
        // 여기는 아래있는
        // php 주소를 넣었습니다.
    
        private class AndroidBridge {
            @JavascriptInterface
            public void setAddress(final String arg1) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        txt_address.setText(String.format(arg1));
    
                        // WebView를 초기화 하지않으면 재사용할 수 없음
                        init_webView();
                    }
                });
            }
        }
    
        public class SslWebViewConnect extends WebViewClient {
    
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed(); // SSL 에러가 발생해도 계속 진행!
            }
    
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;// 응용프로그램이 직접 url를 처리함
            }
        }
    }
    

    안녕하세요 이번에 다음 주소 API를 이용해서 주소를 검색하는 기능을 사용하려 하는데 안드로이드 스튜디오 디바이스에서는 잘 뜨는데 휴대폰으로 디버깅 하면 웹뷰가 하얀 화면으로만 나오네요 ..

    휴대폰 버전은 8.0,6.0 이고 디바이스 버전은 9.0,8.0 으로 구동 해봤을때 휴대폰은 둘다 하얀 화면 이었고 디바이스는 둘다 작동이 됐습니다.

    아래는 php 데이터를 넘겨주는 php 파일입니다.

    <?php
    header("Content-Type: text/html; charset=UTF-8");
    ?>
    
    <script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
    <script>
    new daum.Postcode({
        oncomplete: function(data) {
            if(data.userSelectedType=="R"){
                // userSelectedType : 검색 결과에서 사용자가 선택한 주소의 타입
                // return type : R - roadAddress, J : jibunAddress
                // TestApp 은 안드로이드에서 등록한 이름
                window.TestApp.setAddress(data.roadAddress);
            }
            else{
                window.TestApp.setAddress(data.jibunAddress);
            }        
        }
    }).open();
    </script>
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.01.16

    webView 하얀 화면


     public class MainActivity extends AppCompatActivity {
    
    private WebView webView;
    private TextView txt_address;
    private Handler handler;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        txt_address = findViewById(R.id.txt_address);
    
        // WebView 초기화
        init_webView();
    
        // 핸들러를 통한 JavaScript 이벤트 반응
        handler = new Handler();
    }
    
    public void init_webView() {
    
    
        // WebView 설정
        webView = (WebView) findViewById(R.id.webView_address);
    
        webView.setWebViewClient(new WebViewClient() {
    
            @Override
            public void onReceivedSslError(WebView view,
                                           SslErrorHandler handler, SslError error) {
                handler.proceed();
            }
        });
    
        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    
        webView.setWebViewClient(new SslWebViewConnect());
        // JavaScript 허용
        webView.getSettings().setJavaScriptEnabled(true);
    
        // JavaScript의 window.open 허용
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    
    
        // JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌
        webView.addJavascriptInterface(new AndroidBridge(), "TestApp");
    
        // web client 를 chrome 으로 설정
        webView.setWebChromeClient(new WebChromeClient());
    
        webView.getSettings().setDomStorageEnabled(true);
    
    
    }
        // webview url load. php 파일 주소
    //        webView.loadUrl("http://naver.com");    
    여기는 아래있는 php 주소를 넣었습니다.
    
    private class AndroidBridge {
        @JavascriptInterface
        public void setAddress(final String arg1) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    txt_address.setText(String.format(arg1));
    
                    // WebView를 초기화 하지않으면 재사용할 수 없음
                    init_webView();
                }
            });
        }
    }
    
    public class SslWebViewConnect extends WebViewClient {
    
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed(); // SSL 에러가 발생해도 계속 진행!
        }
    
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;//응용프로그램이 직접 url를 처리함
        }
    }
    

    }

    안녕하세요 이번에 다음 주소 API를 이용해서 주소를 검색하는 기능을 사용하려 하는데 안드로이드 스튜디오 디바이스에서는 잘 뜨는데 휴대폰으로 디버깅 하면 웹뷰가 하얀 화면으로만 나오네요 ..

    휴대폰 버전은 8.0,6.0 이고 디바이스 버전은 9.0,8.0 으로 구동 해봤을때 휴대폰은 둘다 하얀 화면 이었고 디바이스는 둘다 작동이 됐습니다.

    아래는 php 데이터를 넘겨주는 php 파일입니다.

    <?php
    
    header("Content-Type: text/html; charset=UTF-8");
    
    ?>
    
    
    
    <script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
    
    <script>
    
    new daum.Postcode({
    
        oncomplete: function(data) {
    
            if(data.userSelectedType=="R"){
    
                // userSelectedType : 검색 결과에서 사용자가 선택한 주소의 타입
    
                // return type : R - roadAddress, J : jibunAddress
    
                // TestApp 은 안드로이드에서 등록한 이름
    
                window.TestApp.setAddress(data.roadAddress);
    
            }
    
            else{
    
                window.TestApp.setAddress(data.jibunAddress);
    
            }        
    
        }
    
    }).open();
    
    </script>