0

In my application I am using WebView. I am getting content in html format. So I am using loadData(). Html content belongs to Payment Gateway. Initially I am getting html content when I load it using loadData() and check in setWebViewClient() method shouldOverrideUrlLoading() onPageFinished() I am getting URL's instead html content which I loaded initially. But page is loaded successfully.

After payment is done and when I redirecting to callback URL it showing me html content.

Here is my WebView code

viewDialoque.showDialog();
final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);
webView.getSettings().setLightTouchEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");

webView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.i(TAG, "Processing webview url click...");
        view.loadUrl(url);
        return true;
    }

    public void onPageFinished(WebView view, String url) {
//                Log.i(TAG, "Finished loading URL: " + url);
        viewDialoque.hideDialog();
    }

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Log.e(TAG, "Error: " + description);
    }
});

webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setSupportZoom(false);

//        webView.loadUrl(url);
webView.loadData(url, "text/html; charset=utf-8", "UTF-8");

Please let me know if you require any additional information.

EDIT: html data

String htmlData = "<form id="payForm" action="https://pg.paylogic.biz/v1/jsp/paymentrequest" method="post"><input type="hidden" name="APP_ID" value="1002220117153242">\n" + "<input type="hidden" name="ORDER_ID" value="1643451746107404">\n" + "<input type="hidden" name="RETURN_URL" value="">\n" + "<input type="hidden" name="CUST_EMAIL" value="amit@gmail.com">\n" + "<input type="hidden" name="CUST_NAME" value="Amit Yadav">\n" + "<input type="hidden" name="CUST_STREET_ADDRESS1" value="38, Hitech City Rd">\n" + "<input type="hidden" name="CUST_CITY" value="Madhapur">\n" + "<input type="hidden" name="CUST_STATE" value="Test">\n" + "<input type="hidden" name="CUST_COUNTRY" value="India">\n" + "<input type="hidden" name="CUST_ZIP" value="443322">\n" + "<input type="hidden" name="CUST_PHONE" value="7330778210">\n" + "<input type="hidden" name="CURRENCY_CODE" value="356">\n" + "<input type="hidden" name="AMOUNT" value="30000">\n" + "<input type="hidden" name="PRODUCT_DESC" value="Test Product">\n" + "<input type="hidden" name="CUST_SHIP_STREET_ADDRESS1" value="">\n" + "<input type="hidden" name="CUST_SHIP_CITY" value="">\n" + "<input type="hidden" name="CUST_SHIP_STATE" value="">\n" + "<input type="hidden" name="CUST_SHIP_COUNTRY" value="">\n" + "<input type="hidden" name="CUST_SHIP_ZIP" value="">\n" + "<input type="hidden" name="CUST_SHIP_PHONE" value="">\n" + "<input type="hidden" name="CUST_SHIP_NAME" value="">\n" + "<input type="hidden" name="TXNTYPE" value="SALE">\n" + "<input type="hidden" name="HASH" value="608ADAC7005E4B5B4013F501A567C42D3EF7099A081227304AB03567D9DFD436">\n" + " document.getElementById("payForm").submit();

Redirecting...

\n" + "\n";
Amit Yadav
  • 32,664
  • 6
  • 42
  • 57

1 Answers1

0

Try like this

WebView urlWebView = (WebView)findViewById(R.id.containWebView);
    urlWebView.setWebViewClient(new AppWebViewClients());
    urlWebView.getSettings().setJavaScriptEnabled(true);
    urlWebView.getSettings().setUseWideViewPort(true);

    // urlWebView.loadUrl("https://www.google.com/"); //For URL

    urlWebView.loadData(yourData, "text/html", "UTF-8");
    // OR
    urlWebView.loadDataWithBaseURL(null, yourData, "text/html", "UTF-8", null);
    
    
    public class AppWebViewClients extends WebViewClient {
    
    
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            view.loadUrl(url);
            return true;
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
    
        }
    }
  • Muhammad input in my case is html content I have to use loadData() instead of loadUrl() – Amit Yadav Jan 29 '22 at 08:24
  • Check the Answer brother I have updated it. – Muhammad Haseeb Jan 29 '22 at 08:49
  • Muhammad I used your solution but still I am getting html content. – Amit Yadav Jan 29 '22 at 09:41
  • @AmitYadav can you send me your `String data`. So i can check it, or you can directly check [this reference](https://stackoverflow.com/questions/13816464/how-to-load-html-string-in-a-webview) – Muhammad Haseeb Jan 29 '22 at 09:50
  • Muhammad Sorry I can't send my String data it is confidential. I have gone the link which you shared its all about loadData() method which I have already tried. – Amit Yadav Jan 29 '22 at 10:14
  • i have checked my code with `String data` its working fine. May be something is missing or wrong in your data, for that i have to check your data – Muhammad Haseeb Jan 29 '22 at 10:18
  • Muhammad Please check my question I have updated my question and posted my htmlData. Open it in WebView and load it using loadData(). Then click on "PhonePe" enter your upi id and press Ok. Subsequently do "Cancel Payment" and observe html content. – Amit Yadav Jan 29 '22 at 10:37