首页 > 解决方案 > How to modify url webview in setting screen?

问题描述

User have an activity with account & password (login screen). I have an activity is setting screen (using Webview), it depends on the url (model class Account have loginId & status).

I have a example: account.me/u/mobile/menuloginId={loginId}&from=android&status={1/2}

How to modify url and where is place modify url when login account?

Some code in class setting screen:

public class B2BSettingController extends B2BViewController implements OnClickListener {
public B2BWebView mWebView = null;
public B2BDialogWindow<String> logoutDialog = null;
private B2BWebViewDataLoading mDataLoadingDialogView;

B2BSettingController(B2BMainActivity act, B2BHandler handler) {
    super(act, handler);
}

@Override
public void displayContainView() {
    turnTo(R.layout.b2b_setting, false, null, false);
}

@Override
public void initView(Map<String, Object> bundle) {
    mDataLoadingDialogView = B2BWebViewDataLoading.getInstance(mActivity);
    showOtherTitle(this);
    B2BShowWitchButton btnStatus = new B2BShowWitchButton();
    btnStatus.isShowLogoutButton = true;
    showWhichButton(btnStatus);
    setTitle(R.string.setting_ok);
    mActivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    mWebView = (B2BWebView) mView.findViewById(R.id.sv_setting);
    mWebView.setTag(this);
    mWebView.requestFocus(View.FOCUS_DOWN);

    mWebView.postUrl(MENU_PAGE, EncodingUtils.getBytes("loginId=" + B2BLoginBis.getUserLoginId()
            + "&contractType=" + B2BLoginBis.getUserContractType() + "&autoLoginKey="
            + B2BLoginBis.getUserAutoLoginKey() + "&lang=" + B2BApplication.getLanguage()
            + "&dpi=" + (mActivity.densityDpi >= 240 ? 1 : 0), "base64"));

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
            if (errorCode == -2 && !mActivity.isDialogShowing()) {
                mActivity.showMessageDialog(mActivity.getString(R.string.no_network_connection));
            }
            mDataLoadingDialogView.close();
        }

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

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

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

Thanks you!

标签: androidwebview

解决方案


You can use shouldOverrideUrlLoading method of WebViewClient to catch redirect url

mWebView.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                if (url.equals(something)) {
                    // Do something
                }

                return super.shouldOverrideUrlLoading(view, url);
            }

            @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

                if (request.getUrl().toString().equals(something)) {
                    // Do something
                }

                return super.shouldOverrideUrlLoading(view, request);
            }

推荐阅读