0

Android OS の以前のリリースでは問題なく動作する WebView がありますが、Ice Cream Sandwich デバイスの読み込みに問題があります。読み込もうとしているページには BASIC AUTH が必要であり、セキュリティ以外の目的でクエリ文字列パラメーターを渡しています。

問題は WebViewClient.onReceivedHttpAuthRequest メソッドにあります。

 String[] up = view.getHttpAuthUsernamePassword(host, realm);

ユーザーの ID とパスワードの代わりに null 配列を返します。これが Android ICS で異なる動作をする理由を知っている人はいますか? 他のバージョンの OS のユーザー ID とパスワードを取得します。

完全なコード:

public class DestinationWebViewScreen extends Activity{

    WebView mWebView;

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.destination_webview);

            mWebView = (WebView) findViewById(R.id.social_destination_webview);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.getSettings().setLoadsImagesAutomatically(true);
            mWebView.clearCache(true);
            mWebView.clearFormData();
            mWebView.clearHistory();   
            mWebView.getSettings().setBuiltInZoomControls(true); 

            mWebView.setHttpAuthUsernamePassword("HOST_OF_WEBAPP","Spring Security Application", "USERID", "PASSWORD");

            mWebView.setWebViewClient( new WebViewClient() { 
                @Override 
                public void onReceivedHttpAuthRequest  (WebView view, 
                        HttpAuthHandler handler, String host,String realm){ 

                    String[] up = view.getHttpAuthUsernamePassword(host, realm); 
                    if( up != null && up.length == 2 ) { 
                        handler.proceed(up[0], up[1]); 
                    } 
                }


                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);

                    if(progressDialog != null){
                        progressDialog.dismiss();
                    }

                    showProgressbar();
                }


                @Override
                public void onPageFinished(WebView view, String url) {              
                    super.onPageFinished(view, url);

                    dismissProgressDialog();
                }

                @Override
                public void onReceivedError(WebView view, int errorCode,
                        String description, String failingUrl) {                
                    super.onReceivedError(view, errorCode, description, failingUrl);

                    dismissProgressDialog();


                }



            });

    mWebView.loadUrl("https://webapphost/webapp?customerId=0-222293");

    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);        
            registerReceiver(networkStateReceiver, filter);
    }

    public void showProgressbar() {
        progressDialog = new CustomProgressDialog(SocialDestinationWebViewScreen.this); 
        progressDialog.getWindow().setBackgroundDrawable(getResources().getDrawable(android.R.color.transparent));
        progressDialog.setMessage(SocialDestinationWebViewScreen.this.getResources().getString(R.string.loading));
        progressDialog.show();
    }


    void dismissProgressDialog(){

        if(progressDialog != null){
            progressDialog.dismiss();
        }

        progressDialog = null;
    }

}
4

1 に答える 1

3

#onReceivedHttpAuthRequest で受け取るものを確認しましたか?

私はあなたの言うことを修正しました。ICS は、ホストだけでなくポートも「ホスト」として返すようです。HOST_OF_WEBAPP:80 のようになります。

そのため、#onReceivedHttpAuthRequest で「HOST_OF_WEBAPP:80」を受け取った場合、「HOST_OF_WEBAPP」として保存したものは取得されません。

試してみる!

于 2012-12-05T16:32:28.673 に答える