How to detect 412 precondition failed errors in android webview url

user2386226

I am using an authenticated webview for my app.There is a url called with respect to a search term, such that if you entered abc in the search box, it will call the url "http://something.com/something/abc/something". It loads fine, until I have an invalid searchterm say if I type in "INVALIDCRAP" it will still take the url as "http://something.com/something/INVALIDCRAP/something and try to load it thus giving me the 412 precondition error. I want to make it such that in case the identifier "INVALIDCRAP" doesnt exist, instead of 412 precondition error it will redirect me to say "google.com".Any ideas on how to go about it ? Thanks in advance Here is my code for the same:

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

            Bundle bundle = this.getArguments();
            URL = getUrl();

            if(bundle != null)
                mSearchTerm = getArguments().getString(SEARCH_TERM);

             }
     public void setSearchTerms(String sTerms){
         mSearchTerm = sTerms;
     }
private static String getUrl(){
        String url = "";

        final String getuuid = SharedPreferencesManager.getInstance().getUUID();
        final String environmentApi = SharedPreferencesManager.getInstance().getEnvironmentApi();
        if (environmentApi.equalsIgnoreCase(NetworkUtils.Apis.ALPHA)) {
            "https://something.com/service/v1/?q="+mSearchTerm+"%20revenue&ui.theme=novadark&uuid="+getuuid+"&userAgent=android";



        }


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (goingBack) {
            return null;
        }
        final MainActivity activity = (MainActivity) getActivity();
        final Resources resources = Application.getAppResources();

        activity.setBackPressListener(this);
        View view = inflater.inflate(R.layout.fragment_search_answers, container, false);


        mWebview =  (WebView)view.findViewById(R.id.webview);
        progressBar = (LinearLayout) view.findViewById(R.id.loading);   
        mWebview.setVisibility(View.VISIBLE);

        progressBar.setVisibility(View.VISIBLE);

            mWebview.setWebViewClient(new MyWebViewClient(this, mWebview));

            mWebview.setBackgroundColor(0);
            mWebview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            mWebview.getSettings().setAllowFileAccess(true);
            mWebview.getSettings().setDomStorageEnabled(true);
            mWebview.getSettings().setJavaScriptEnabled(true);

            mWebview.setHttpAuthUsernamePassword(HOST, REALM, USERNAME, PASSWORD);
            mWebview.setScrollbarFadingEnabled(false);
            mWebview.getSettings().getLoadsImagesAutomatically();


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            mWebview.getSettings().setDisplayZoomControls(false);
            if(StringUtils.isEmpty(URL)){

            }else if(!StringUtils.isEmpty(URL)){


                if(URLUtil.isValidUrl(URL)){
                     mWebview.loadUrl(URL);
                }else{
                    mWebview.loadUrl("http://www.google.com");


                }

            }



        return view;
    }

  public class MyWebViewClient extends WebViewClient {
        private String loginCookie;
        public MyWebViewClient(AnswersWebViewFragment answersWebViewFragment, WebView webview) {
            super();
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            view.setVisibility(View.VISIBLE);

        }

        @Override
        public void onPageFinished(WebView view, String url) {
            view.setVisibility(View.VISIBLE);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setCookie(url, loginCookie);
            final Animation fade = new AlphaAnimation(0.0f, 1.0f);
            fade.setDuration(200);
            view.startAnimation(fade);
            view.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.GONE);

        }
        @Override
        public void onReceivedError( WebView view, int errorCode, String description, String failingUrl ) {
            Toast.makeText(view.getContext(), "Authentication Error", Toast.LENGTH_LONG).show();
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

        @Override
        public void onLoadResource( WebView view, String url ){

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

                return super.shouldOverrideUrlLoading(view, url);


        }


        @Override
        public void onReceivedHttpAuthRequest( WebView view, final HttpAuthHandler handler, final String host, final String realm ){
                handler.proceed(USERNAME,PASSWORD);

    }

         @Override
        public void onReceivedSslError( WebView view, SslErrorHandler handler, SslError error ) {
            handler.proceed();
        }

    }

Here's the screen for the same: enter image description here

MadDeveloper

If that really is the case that onReceivedError is not called then I suppose there's only one option (and only under condition that you control the website). Just make the assumption that the title will contain e.g "Server Error" if 412 happens.

...your code

webview.setWebChromeClient(new WebChromeClient() {
   @Override
   public void onReceivedTitle(WebView view, String title) {
      super.onReceivedTitle(view, title);

      String serverError = "ServerError";
      if (title.contains(serverError)) {
          view.stopLoading();
          webview.loadUrl(getNewUrl());
      }
   }
});

public String getNewUrl(){
   //do your stuff here
   return "http://www.google.com";
} 

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

How to fix 412 (Precondition Failed) Error HTML5 Video Tag

412 (Precondition Failed) when add attachments at same time

Display error from 412 Precondition Failed, jQuery, $.post

CalDav Client for iCloud: MKCOL fails with 412 precondition failed

Detect URL changes in Webview android

How to get android webview url to auto detect https http and www?

How to change activity when an url is detect in webview Android

Datacite - You have to register metadata first! HTTP/1.1 412 Precondition Failed

How to detect when webview url changes in flutter?

How to detect video in Android WebView with HitTestResult?

How to detect button click in WebView Android?

Can't import binay h2o model with h2o.loadModel() function: 412 Precondition Failed

Detect rotation on Android WebView

How to detect if using Android Browser or Android Native WebView Client

Android how to pass url in android iframe webview?

Detect URL change in JavaFX WebView

Precondition check failed

How to load the URL of youtube in webview android?

How to perform url change for android webview?

how to redirect a url after a login in webview android

How to detect custom errors

Android API 23. WebView how to ignore javascript errors

Detect a blank webpage in WebView android

android Failed to load WebView provider: No WebView installed

How can I save a URL and load this URL in webview (android studio)

How to detect single Tap on WebView

How to detect webview scrolled to bottom?

Android open URL in WebView

Android Webview URL Authentication