Skip to content
Advertisement

Android studio webview does not allow cors

I creating a android application and i want to load data from my server but if i load the data i get a “TypeError: Failed to fetch”.

I have tried many ways. I also tried just to load google.com inside the webpage and it also doesn’t work.

All my files:

Main_actifity.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/ContentFrame"  
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
android:layout_height="match_parent"
/>

MainActivity.java

package com.enervisie.enervisieinspect;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // Landscape


    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);

    // WebView
    FrameLayout contentFrame = (FrameLayout) findViewById(R.id.ContentFrame);
    WebView mWebView = new WebView(this);

    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setAllowFileAccessFromFileURLs(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    }

    mWebView.getSettings().setLoadWithOverviewMode(true);
    mWebView.getSettings().setBuiltInZoomControls(false);
    mWebView.getSettings().setDatabaseEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.getSettings().setAllowContentAccess(true);

    mWebView.getSettings().setSupportZoom(false);
    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.setInitialScale(0);


    mWebView.setWebViewClient(new WebViewClient() {
        public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed() ;
        }
    });

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return false;
        }
    });

    mWebView.loadUrl("file:///android_asset/index.html");

    contentFrame.removeAllViews();
    contentFrame.addView(mWebView);
}

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // Landscape
    handler.proceed(); // Ignore SSL certificate errors
}

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<application
    android:allowBackup="true"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/Theme.EnervisieInspect"
    tools:targetApi="31">
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

I was expecting to load data from my webserver and send data to my webserver.

Advertisement

Answer

You should add internet permission in Manifest.xml

<uses-permission android:name="android.permission.INTERNET" />

and follow this instruction for Network Security Configuration

Advertisement