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

Webview에서 post 요청에 대한 reload()가 롤리팝에서 정상동작을 하지 않네요.

0 추천
안녕하세요.

기존에 Webview에서 post 요청에 대해 reload()처리를 위해 다음 방식으로 구현했습니다.

//////////////////////////////////////////////////////////////////

// 웹요청

String url = "http://....";

String postParam = "param1=1&param2=....";

webView.postUrl("xxxx", postParam.getBytes());

//.....

// WebViewClient

public void onFormResubmission(WebView view, Message dontResent, Message resent) {

resent.sendToTarget();

}

//...

webView.reload();

//////////////////////////////////////////////////////////////////

잘 동작했는데, 마쉬멜로우에서 동작을 안되길래 살펴봤더니 롤리팝부터 동작이 되지 않았네요. WebClient의 onPageFinish()로 살펴보면 url에 대해서는 reload되는 듯 한데, post 파라미터가 전달되지 않아서 의도대로 웹페이지가 표시되지 않고 있습니다.

구글링 해봐도 나오지도 않고, 뭐가 문제인지 모르겠네요.

아시는 분 답변부탁드립니다. 미리 감사드려요~
우물안개구리 (390 포인트) 님이 2015년 12월 10일 질문

1개의 답변

0 추천

mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setAcceptThirdPartyCookies(mWebView, true);

 

이걸로 한번 해보세요. 혹시 잘된다면 롤리팝이상일때만 동작하도록 코드 분기 하시구요.

라쎄린드 (25,460 포인트) 님이 2015년 12월 11일 답변
적용 해봤는데, 안되네요.
흠..저는 롤리팝에도 잘돌아가는거 같은데
첫번째 방안
webView.postUrl(strURL, EncodingUtils.getBytes(postData, "BASE64");

두번째방안
String postData 의 인자값을 Base64.encodeToString(strPW.getBytes(), 0) 으로 해보세요 패스워드에 특문이 포함되는 경우 입니다.
적용해봤는데, 그 문제도 아닌 것 같네요.
인코딩 적용하니까 처음 로드시에도 페이지가 안나타나네요.

갱신할 때 post 데이터가 누락되는 거 같은데...
우선은 reload() 쓰지 않고, 이전 요청값을 가지고 있다가 postUrl()로 처리하게 해야 될 거 같네요.

답변 주셔서 감사합니다.
...